Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我在JSON对象调用中不断遇到nullpointer异常_Java_Android_Android Gradle Plugin - Fatal编程技术网

Java 我在JSON对象调用中不断遇到nullpointer异常

Java 我在JSON对象调用中不断遇到nullpointer异常,java,android,android-gradle-plugin,Java,Android,Android Gradle Plugin,出于某种原因,我在进行双重解析时不断遇到null指针异常。在进一步询问之后,我的JSON对象似乎出现了一些问题,但我不知道问题是什么。我正在从OpenWeatherMapAPI提取JSON数据。我成功地将数据拉入并打印到日志中。但是,当我尝试使用JSONObject访问时,我遇到了一个错误。请帮忙 代码: 小心——“天气”是一个JSONArray,而不是JSONObject。NullPointerException可能就是由于这个原因 尝试使用myObject.getJSONArray(“天气”

出于某种原因,我在进行双重解析时不断遇到null指针异常。在进一步询问之后,我的JSON对象似乎出现了一些问题,但我不知道问题是什么。我正在从OpenWeatherMapAPI提取JSON数据。我成功地将数据拉入并打印到日志中。但是,当我尝试使用JSONObject访问时,我遇到了一个错误。请帮忙

代码:

小心——“天气”是一个
JSONArray
,而不是
JSONObject
。NullPointerException可能就是由于这个原因

尝试使用
myObject.getJSONArray(“天气”)
,然后在其中迭代JSONObject


有关最后一部分的更多信息,请参见此处:

看起来
myObject
没有名为
“temp”
的项,因此:
-在第133行,您将
hello
设置为
null

-在第141行,您将该
null
传递给
Double.parseDouble()

-获取异常,因为类
Double
无法消化null
就这样
在调试器中检查它,但我几乎可以肯定-根据堆栈跟踪

第141Ya行的
null
,在进一步检查JSONObject调用的某些问题后,这是双精度的变化,这就是为什么我问这个问题的原因:/确保你在所有捕获物上打印stacktraces,否则你永远不会知道是什么导致了问题
package com.anuraagy.myweather;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import android.content.*;
import android.os.Build;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;


public class MyActivity extends Activity {
    private String s;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        private JSONObject myObject,mainObject,nameObject;
        private ImageView myImage;
        private TextView titleText;
        private String hello,weatherName,max_temp,min_temp;
        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_my, container, false);


            RequestTask task = new RequestTask();
            task.execute(new String[]{"http://api.openweathermap.org/data/2.5/weather?q=Ashburn&APPID=970bf0e4978dae293b065f8f2830ba58"});

            return rootView;
        }


        public class RequestTask extends AsyncTask<String, String, String> {
            private TextView myView;
            private String s;
            @Override
            protected String doInBackground(String... uri) {
                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response;
                String responseString = null;
                try {
                    response = httpclient.execute(new HttpGet(uri[0]));
                    StatusLine statusLine = response.getStatusLine();
                    if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
                        ByteArrayOutputStream out = new ByteArrayOutputStream();
                        response.getEntity().writeTo(out);
                        out.close();
                        responseString = out.toString();
                    } else {
                        //Closes the connection.
                        response.getEntity().getContent().close();
                        throw new IOException(statusLine.getReasonPhrase());
                    }
                } catch (ClientProtocolException e) {
                    //TODO Handle problems..
                } catch (IOException e) {
                    //TODO Handle problems..
                }

                Log.i("", responseString);
                return responseString;
            }

            @Override
            protected void onPostExecute(String result){
                Log.i("","hello");
                super.onPostExecute(result);
                try {
                     myObject = new JSONObject(result);
                     nameObject = myObject.getJSONObject("weather");
                     weatherName = nameObject.getString("main");
                     mainObject = myObject.getJSONObject("main");
                    Log.i("Wather Name",weatherName);
                    Log.i("mainObject",mainObject.toString());
                     hello = mainObject.getString("temp");
                     max_temp = mainObject.getString("temp_max");
                     min_temp = mainObject.getString("temp_min");


                } catch(JSONException jsonException){

                }
                double f = Double.parseDouble(hello);
                double max = Double.parseDouble(max_temp);
                double min = Double.parseDouble(min_temp);

                double realMax = (max - 273)* 1.8 + 32;
                double realMin = (min - 273)* 1.8 + 32;
                double realTemp = (max - 273)* 1.8 + 32;

                int myMax = (int)realMax;
                int myMin = (int)realMin;

                int myWeather = (int)realTemp;


                titleText = (TextView)getActivity().findViewById(R.id.textView3);
                String fe = titleText.getText().toString();
                fe.replace("definetly",weatherName);
                myView = (TextView)getActivity().findViewById(R.id.textView);

//                if()
//                {
//
//                }
//                else
//                {
//
//                }
                myImage = (ImageView)getActivity().findViewById(R.id.imageView);
                myImage.setImageResource(R.drawable.clearnight);
                String weather = myWeather + "";
                myView.setText(weather + (char) 0x00B0 +"F");
//                //Do anything with response..
            }
        }
    }
}
10-16 10:01:26.398      664-664/com.anuraagy.myweather E/Trace﹕ error opening trace file: No such file or directory (2)
10-16 10:01:35.058      664-668/com.anuraagy.myweather D/dalvikvm﹕ GC_CONCURRENT freed 75K, 2% free 11112K/11335K, paused 17ms+3ms, total 312ms
10-16 10:01:35.058      664-664/com.anuraagy.myweather D/dalvikvm﹕ WAIT_FOR_CONCURRENT_GC blocked 282ms
10-16 10:01:35.498      664-664/com.anuraagy.myweather D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
10-16 10:01:38.388      664-680/com.anuraagy.myweather I/﹕ {"coord":{"lon":-77.49,"lat":39.04},"sys":{"type":1,"id":2856,"message":0.0194,"country":"US","sunrise":1413458470,"sunset":1413498574},"weather":[{"id":701,"main":"Mist","description":"mist","icon":"50d"},{"id":721,"main":"Haze","description":"haze","icon":"50d"},{"id":741,"main":"Fog","description":"fog","icon":"50d"}],"base":"cmc stations","main":{"temp":288.03,"pressure":1008,"humidity":100,"temp_min":286.15,"temp_max":290.15},"wind":{"speed":2.86,"deg":261.502},"clouds":{"all":90},"dt":1413468071,"id":4744870,"name":"Ashburn","cod":200}
10-16 10:01:38.398      664-664/com.anuraagy.myweather I/﹕ hello
10-16 10:01:38.438      664-664/com.anuraagy.myweather D/AndroidRuntime﹕ Shutting down VM
10-16 10:01:38.438      664-664/com.anuraagy.myweather W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40a13300)
10-16 10:01:38.448      664-664/com.anuraagy.myweather E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at java.lang.StringToReal.parseDouble(StringToReal.java:244)
            at java.lang.Double.parseDouble(Double.java:295)
            at com.anuraagy.myweather.MyActivity$PlaceholderFragment$RequestTask.onPostExecute(MyActivity.java:141)
            at com.anuraagy.myweather.MyActivity$PlaceholderFragment$RequestTask.onPostExecute(MyActivity.java:91)
            at android.os.AsyncTask.finish(AsyncTask.java:631)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)