我正在做一个天气应用程序,并且出现了一个空指针异常,我不明白如何解决此问题
代码是:
public class MainActivity extends AppCompatActivity {
EditText editText;
TextView textView;
String city="";
String main ="",Description="";
public class WeatherReport extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... urls) {
StringBuilder Aresult= new StringBuilder();
URL url;
HttpURLConnection httpConnect=null;
try{
url=new URL(urls[0]);
httpConnect=(HttpURLConnection) url.openConnection();
httpConnect.connect();
InputStream inStream =httpConnect.getInputStream();
InputStreamReader inReader=new InputStreamReader(inStream);
int data;
data=inReader.read();
char cur;
while(data!=-1){
cur=(char)data;
Aresult.append(cur);
data=inReader.read();
}
return Aresult.toString();
}
catch (Exception e){
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONObject jsonObject =new JSONObject(result);
String weather=jsonObject.getString("weather");
String msg="";
JSONArray jsonArray=new JSONArray(weather);
JSONObject jsonObject1=jsonArray.getJSONObject(0);
main=jsonObject1.getString("main");
Description=jsonObject1.getString("description");
if(!main.equals("") && !Description.equals("")){
msg="Main weather :"+main+"Description :"+Description +" ";
}
if(!msg.equals("")){
textView.setText(msg);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
public void makeURL(View view){
WeatherReport wthReport=new WeatherReport();
city=editText.getText().toString();
String execute1="http://api.openweathermap.org/data/2.5/weather?q=Kolkata,in&APPID=9d7a112d29791383c09ed13256996f13";
wthReport.execute(execute1);
Log.i("Result ",execute1);
InputMethodManager inputMethodManager=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(editText.getWindowToken(),0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=findViewById(R.id.editText);
textView=findViewById(R.id.textView2);
}
}
我也确实添加了使用互联网的权限,并且我的互联网正在运行。
日志显示:
2020-03-22 18:00:19.214 12098-12098/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.satyaki.lasttry, PID: 12098
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:159)
at org.json.JSONObject.<init>(JSONObject.java:176)
at com.satyaki.lasttry.MainActivity$WeatherReport.onPostExecute(MainActivity.java:87)
at com.satyaki.lasttry.MainActivity$WeatherReport.onPostExecute(MainActivity.java:34)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)