尝试使用Async任务获取json时的java.lang.NullPointerException
16lz
2021-01-22
I am trying to get json from Url when I click button, but getting null pointer exceptions and Unfortunately application stops This is my onCreate method.
我点击按钮时尝试从Url获取json,但是获取空指针异常并且遗憾的是应用程序停止这是我的onCreate方法。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autoCompView = (AutoCompleteTextView)findViewById(R.id.autocomplete_current);
findViewById(R.id.shortestButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getUrl();//calling getUrl method for getting Url
}
});
This is my getUrl method for creating url and getting json from that url.
这是我的getUrl方法,用于创建url并从该url获取json。
private void getUrl() {
String result = null;
String dest1 = list.get(0);
String dest2 = list.get(1);
String dest3 = list.get(2);
String start = getAddress();
String urls = "https://maps.googleapis.com/maps/api/distancematrix/json?";
try {
encodedString = urls + "origins="
+ URLEncoder.encode(start, "utf8")+"|"
+ URLEncoder.encode(dest1, "utf8")+"|"
+ URLEncoder.encode(dest2, "utf8")+"|"
+ URLEncoder.encode(dest3, "utf8")
+"&destinations="
+ URLEncoder.encode(dest1, "utf8")+"|"
+ URLEncoder.encode(dest2, "utf8")+"|"
+ URLEncoder.encode(dest3, "utf8")+"|"
+ URLEncoder.encode(start, "utf8")
+"&mode=driving"
+"&language = en-En"
+"&key="+API_KEY;
encodedString = encodedString.replaceAll("%2C","+");
encodedString = encodedString.replaceAll("\\++", "+");
}
private class ConnectToUrlTask extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... uRl) {
String data = "";
HttpConnections httpConnections = new HttpConnections();
try {
data = httpConnections.readUrl(uRl[0]);
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(String s) {
new UrlTasks().execute(s);
}
}
private class UrlTasks extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... params) {
String distance = null;
JSONObject jobj = null;
try {
jobj = new JSONObject(params[0]);
} catch (JSONException e) {
e.printStackTrace();
}
try {
JSONArray jsonArray = jobj.getJSONArray("rows");
// Log.d("jsonArray", String.valueOf(jsonArray));
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
JSONArray ja2 = object.getJSONArray("elements");
for (int j = 0; j < ja2.length(); j++) {
JSONObject object3 = ja2.getJSONObject(j);
distance = object3.getJSONObject("distance").getString("text");
}
}
//Log.d("jsonArray", String.valueOf(jsonArray));
} catch (JSONException e) {
e.printStackTrace();
}
return distance;
}
@Override
protected void onPostExecute(String s) {
Log.d("St*",s);
}
}
This is my Error log.
这是我的错误日志。
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:838)
Caused by: java.lang.NullPointerException
at com.example.wm.shortestpathdemo.MainActivity$UrlTasks.doInBackground(MainActivity.java:359)
at com.example.wm.shortestpathdemo.MainActivity$UrlTasks.doInBackground(MainActivity.java:346)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
1 个解决方案
#1
i have made mistake in creating url. In method getUrl():
我在创建网址时犯了错误。在方法getUrl()中:
private void getUrl() {
String result = null;
String dest1 = list.get(0);
String dest2 = list.get(1);
String dest3 = list.get(2);
String start = getAddress();
String urls = "https://maps.googleapis.com/maps/api/distancematrix/json?";
try {
encodedString = urls + "origins="
+ URLEncoder.encode(start, "utf8")+"|"
+ URLEncoder.encode(dest1, "utf8")+"|"
+ URLEncoder.encode(dest2, "utf8")+"|"
+ URLEncoder.encode(dest3, "utf8")
+"&destinations="
+ URLEncoder.encode(dest1, "utf8")+"|"
+ URLEncoder.encode(dest2, "utf8")+"|"
+ URLEncoder.encode(dest3, "utf8")+"|"
+ URLEncoder.encode(start, "utf8")
+"&mode=driving"
// this is the mistake
+"&language = en-En"
//correct form is
+"&language = en"
+"&key="+API_KEY;
encodedString = encodedString.replaceAll("%2C","+");
encodedString = encodedString.replaceAll("\\++", "+");
}
更多相关文章
- ViewPager中的错误片段接收onContextItemSelected调用
- 四极管:I2CTools编译方法
- 检查ArrayList是否只包含null值的方法。
- 不同Android版本设备正确获取屏幕分辨率的通用方法
- 错误”. lang。当使用带有ViewPager的选项卡时,IllegalStateExcep
- studio更新时候,不小心点了ignore,无法更新的解决方法
- android之发送短信的方法研究
- SQLite的Android光标在方法调用时崩溃
- Java Android套接字连接。错误的IP地址导致应用程序停止响应