从android市场首次安装android应用程序的问题
我正在访问互联网以获取信息。当我访问互联网时,该应用程序正在关闭。如果该应用程序被删除并重新安装,它不会在我访问互联网时强制关闭。第一次安装该应用程序时会发生这种情况。请帮我弄清楚这一点。从android市场首次安装android应用程序的问题
这是堆栈跟踪 -
java.lang.RuntimeException: Unable to start activity ComponentInfo{ListOfDealSites}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at java.io.DataInputStream.readLine(DataInputStream.java:309)
at ListOfDealSites.onCreate(ListOfDealSites.java:53)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
... 11 more
它还说源方法 - DataInputStream.readLine()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dealsites);
InputStream in = null;
try {
// Connect to the server to get the list of deal sites
in = OpenHttpConnection("Link to deal server");
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
DataInputStream dataIO = new DataInputStream(in);
String strLine = null;
int i = 0;
while((strLine = dataIO.readLine())!= null) // Line 53------
{
count = i;
NEWDEALSITES[i++] = strLine;
}
dataIO.close();
in.close();
}
catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
count_deals = count/2;
newdeals = new String[count_deals+1];
newsites = new String[count_deals+1];
int j, k;
for(j = 0, k = 0; k < count; j++)
{
newdeals[j] = NEWDEALSITES[k++];
newsites[j] = NEWDEALSITES[k++];
}
listOfDealSites = (ListView)findViewById(R.id.ListView01);
listOfDealSites.setAdapter(new ArrayAdapter<String>(this,R.layout.row,newdeals));
}
//Function to connect to the server.
private InputStream OpenHttpConnection(String urlString)
throws IOException
{
InputStream in = null;
int response = -1;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}
catch (Exception ex)
{
throw new IOException("Error connecting");
}
return in;
}
}
问题是由于没有互联网连接造成的。我发现了这个异常,并且发出了一条消息来检查连接。
谢谢大家的帮助。
出于某种原因,OpenHttpConnection
被返回null这基本上意味着你在这里没有得到好的回应...
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
这意味着dataIO将是无效的,当你尝试读取线53
从DataInputStream类的构造函数的文档资料...
公共DataInputStream类(InputStream的 中)由于: API等级1
构造上的InputStream新 DataInputStream所英寸
全部读取,然后通过过滤 这个流。请注意,由 读取的数据不是可读的 格式,最有可能是由 创建的DataOutputStream。
警告:通过 空源创建无效的 DataInputStream。 上的所有操作都会失败。
不知道会是什么导致这或如何解决它,但你一定要尝试使用“中”的InputStream创建您的DataInputStream所前检查从OpenHttpConnection
返回一个空的结果。
为什么仅在第一次发生?我如何优雅地关闭应用程序并要求用户再试一次? – user588132 2011-04-24 23:44:36
@ user588132:我不知道 - 我也很困惑。所以你说的是一个完整的卸载/重新安装修复的东西?在附注中,尝试记录OpenHttpConnection方法中的“响应”。知道它是不是HTTP.OK,它可能很有趣。 – Squonk 2011-04-24 23:51:20
是的,这是...我不知道如何重新创建错误。它是否与我需要添加的一些设置有关。 – user588132 2011-04-25 00:04:34
@ user588132:发布ListOfDealSites.onCreate()的代码并告诉我们哪一行是第53行。 – Squonk 2011-04-24 22:54:58
我编辑了我的问题... – user588132 2011-04-24 23:11:33
变量'in'可能为空。您发现异常,但继续使用var, – Blundell 2011-04-24 23:32:07