Java Android RuntimeException:无法实例化活动

Java Android RuntimeException:无法实例化活动,java,android,json,Java,Android,Json,我创建此应用程序是为了将wether详细信息添加到我的应用程序中 在我的Android应用程序中,我有一个GetWeather类,其中我有一个构造函数,可以传递我当前的城市和州 GetWeather weather = new GetWeather(city_send,state_code); 然后,构造函数ping一个带有所需城市、州和API凭据的API URL,以接收天气数据json作为响应。但当我运行应用程序时,它停止说无法实例化活动 主要活动 protected void on

我创建此应用程序是为了将wether详细信息添加到我的应用程序中

在我的Android应用程序中,我有一个
GetWeather类
,其中我有一个构造函数,可以传递我当前的城市和州

GetWeather weather = new GetWeather(city_send,state_code);
然后,构造函数ping一个带有所需城市、州和API凭据的API URL,以接收天气数据json作为响应。但当我运行应用程序时,它停止说无法实例化活动

主要活动

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            Button b1 = (Button) findViewById(R.id.showData);

            b1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                Intent nextScreen = new Intent(MainActivity.this, GetWeather.class);
                GetWeather  gw = new GetWeather("CA","Anuradhapura");

                    startActivity(nextScreen);
                }
            });
        }

GetWeather class


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
...
...

import android.util.Log;  


public class GetWeather {


    private static String WEATHER_URL = "http://api.wunderground.com/api/key/conditions/q/";

    public String weather;
    public String temperature_string;
    public Bitmap weather_icon;

    public GetWeather() {

    }
    public  GetWeather(String city, String state){

        city = city.replaceAll(" ", "_");
        //construct post URL
        final String GET_WEATHER_URL = WEATHER_URL + state + "/" + city + ".json";  
        new Thread(new Runnable()
        {
            public void run()
            {
                String request = GET_WEATHER_URL;
                HttpResponse rp = null;
                JSONObject jObject = null;
                try {
                    rp = (new DefaultHttpClient()).execute(new HttpPost(request));
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (rp != null && rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                    Log.i("Get Weather", "Success");
                    HttpEntity entity = rp.getEntity();
                    InputStream is = null;
                    try {
                        is = entity.getContent();
                    } catch (IllegalStateException e2) {
                        e2.printStackTrace();
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    } catch (NullPointerException n1){
                        n1.printStackTrace();
                    }
                    final char[] buffer = new char[0x10000];
                    StringBuilder out = new StringBuilder();
                    Reader in = null;
                    String json_string_response = null;
                    try {
                        in = new InputStreamReader(is, "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    } catch (NullPointerException n1){
                        n1.printStackTrace();
                    }
                    int read = 0;
                    do {
                        try {
                            read = in.read(buffer, 0, buffer.length);
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (NullPointerException n1){
                            n1.printStackTrace();
                        }
                        if (read>0) {
                            out.append(buffer, 0, read);
                        }
                    } while (read>=0);

                    try {
                        is.close();
                        json_string_response = out.toString();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                    try {
                        jObject = new JSONObject(json_string_response);
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 
                    try {



                         JSONObject current_observation = jObject.getJSONObject("current_observation");
                         weather = current_observation.getString("weather"); 
                         temperature_string = current_observation.getString("temperature_string");
                         String icon_url = current_observation.getString("icon_url");
                         weather_icon = get_weather_icon(icon_url);


                    } catch (JSONException e4) {
                        // TODO Auto-generated catch block
                        e4.printStackTrace();
                    }
                }else{
                        String response = rp.toString().toString();
                        Log.e("Get Weather", response);
                }

            }
        }).start();     
    }

    public static Bitmap get_weather_icon(String url){
        Bitmap bitmap = null;
        InputStream in = null;
        BufferedOutputStream out = null;

        try {

            bitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());

        } catch (MalformedURLException e) {
              e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }

        return bitmap;

    }

}
日志视图

03-20 04:48:01.544: D/AndroidRuntime(1074): Shutting down VM
03-20 04:48:01.554: W/dalvikvm(1074): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
03-20 04:48:01.644: E/AndroidRuntime(1074): FATAL EXCEPTION: main
03-20 04:48:01.644: E/AndroidRuntime(1074): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.jsonapp/com.example.jsonapp.GetWeather}: java.lang.ClassCastException: com.example.jsonapp.GetWeather cannot be cast to android.app.Activity
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.os.Looper.loop(Looper.java:137)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at android.app.ActivityThread.main(ActivityThread.java:5041)
03-20 04:48:01.644: E/AndroidRuntime(1074):     at java.lang.reflect.Method.invokeNative(Native Method
编辑:

java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.example.jsonapp/com.example.jsonapp.GetWeather}: java.lang.ClassCastException:com.example.jsonapp.GetWeather不能为空 播放到android.app.Activity

GetWeather
不是活动类

你有

Intent nextScreen = new Intent(MainActivity.this, GetWeather.class);
GetWeather  gw = new GetWeather("CA","Anuradhapura");
startActivity(nextScreen); 
你只需要

GetWeather  gw = new GetWeather("CA","Anuradhapura");
然后拆下其他2条管路

编辑:

日志:

03-20 02:16:46.273: I/..............(1358): Mostly Cloudy
你有这个:

Intent nextScreen = new Intent(MainActivity.this, GetWeather.class);
GetWeather不是活动类,因此不能将其传递给Intent方法。通过将GetWeahter扩展到Activity,将其更改为Activity类

public class GetWeather {
}
由于您没有在
GetWeather
类中扩展
活动
,因此您不能声明该类有活动。

您必须将
活动
类扩展到
GetWeather
类,如下所示

public class GetWeather extends Activity {
}

我建议您使用

@user2781812无需这样做。拥有
GetWeather gw=新的GetWeather(“CA”、“Anuradhapura”)先生,我按照你说的做了,但是没有得到空的构造函数错误。虽然我有一个空的构造函数there@user2781812你不需要一个空的构造函数。传递2个参数,构造函数有2个参数<代码>GetWeather gw=新GetWeather(“CA”、“Anuradhapura”)和这个
公共GetWeather(字符串城市,字符串州){
谢谢你,先生。我通过了它。现在我得到了json错误。JSONException:对当前的观察没有价值如果你能告诉我一种摆脱它的方法,我将不胜感激。先生,
GetWeahter
没有必要成为一个活动类谢谢你的评论。我通过了它。知道这个错误吗,先生JSONException:对cur没有价值rent_Observation以这种方式异步加载数据显然是最糟糕的方法之一。问题是,您可能希望从您的一个
活动
访问
GetWeather
类的一些数据,但这可能会导致您出现
NullPointerException
,因为您的数据尚未加载(它异步加载到一个单独的线程中)。有几种方法可以处理这种情况,
AsyncTask
Handler
和其他一些方法。请注意。谢谢您的建议,先生。我以前使用过AsyncTask,但运气不好。这就是为什么我这样做的原因。
Intent nextScreen = new Intent(MainActivity.this, GetWeather.class);
public class GetWeather {
}
public class GetWeather extends Activity {
}