Java Android RuntimeException:无法实例化活动
我创建此应用程序是为了将wether详细信息添加到我的应用程序中 在我的Android应用程序中,我有一个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
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 {
}