Android 线程停止响应

Android 线程停止响应,android,multithreading,Android,Multithreading,我是新的Android开发者。我没有参加任何课程,但我正在通过互联网自学。 请在您的android中复制粘贴相同的内容,尝试并指导我为什么它不工作?? 它是在eclipse中开发的。外部依赖项是httpclient-4.0.jar和httpcore-4.0.1.jar 我开发了一个应用程序。 它从IIS服务器获取报告列表。这实际上是HTML页面的链接。(它是全球性的,请查看链接) 它总共有16个Html页面。 假设应用程序每10秒在WebView中更改一次报告(Html页面)。它会更改报告一次。

我是新的Android开发者。我没有参加任何课程,但我正在通过互联网自学。 请在您的android中复制粘贴相同的内容,尝试并指导我为什么它不工作??

它是在eclipse中开发的。外部依赖项是httpclient-4.0.jar和httpcore-4.0.1.jar 我开发了一个应用程序。 它从IIS服务器获取报告列表。这实际上是HTML页面的链接。(它是全球性的,请查看链接)

它总共有16个Html页面。 假设应用程序每10秒在WebView中更改一次报告(Html页面)。它会更改报告一次。但后来它没有改变

请检查并告诉我什么是错误

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.CorpoServe.bvgindialtd.ReportViewer" >

<Button
    android:id="@+id/btnPrev"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/prev" />

<Button
    android:id="@+id/btnNext"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="@string/next" />

<WebView
    android:id="@+id/Brz"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_alignLeft="@+id/btnPrev"
    android:layout_below="@+id/btnPrev" />

<ToggleButton
    android:id="@+id/tbX"
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:checked="true"
    android:text="@string/play"
    android:textOff="Pause"
    android:textOn="Play" />
</RelativeLayout>

这是我的课

     package com.CorpoServe.bvgindialtd;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
import android.widget.ToggleButton;

public class ReportViewer extends ActionBarActivity {

List<String> ls= new ArrayList<String>();
int counter=0;
Handler hnd;
ToggleButton tb;
WebView bz;
public String GetIntenetData(String URL) throws Exception{
    BufferedReader in=null;
    String data=null;
    //URL="http://corposerve.com/ActionPage.asp?action=auth&uid=abc&pwd=abc";
    try{
        HttpClient cl= new DefaultHttpClient();
        URI ws= new URI(URL);
        HttpGet rq=new HttpGet();
        rq.setURI(ws);
        HttpResponse rs = cl.execute(rq);
        in= new BufferedReader(new InputStreamReader(rs.getEntity().getContent()));
        StringBuffer sb=new StringBuffer("");
        String l ="";
        String nl= System.getProperty("line.separator");
        while((l=in.readLine())!=null){

        sb.append(l+nl);

        }
        in.close();
        data=sb.toString();
        return data;
    } finally {
        if(in!=null){
            try{
                in.close();
                return data;
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_report_viewer);

     if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

     try {
        String Url="http://203.90.76.206/newmis/GetReportList.aspx";
        String ss[]=GetIntenetData(Url).split(System.getProperty("line.separator"));
        ls.clear();
        for(String s:ss){
            String[] x =s.split(Pattern.quote("*"));
            ls.add("http://203.90.76.206/newmis" + x[0]);

        }
        bz= (WebView) findViewById(R.id.Brz);
        bz.getSettings().setBuiltInZoomControls(true);
        bz.getSettings().setSupportZoom(true);
        bz.getSettings().setUseWideViewPort(true);
        bz.getSettings().setLoadWithOverviewMode(true);
        bz.loadUrl(ls.get(0));
        tb=(ToggleButton)findViewById(R.id.tbX);
        counter=0;

        hnd=new Handler();
        Runnable rnbl=new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                    try {
                        Thread.sleep(10000);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    hnd.post(new Runnable(){

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            if (tb.isChecked()){
                            counter++;
                            if (counter>=ls.size()-1){
                                counter=0;
                            }

                            bz.loadUrl(ls.get(counter));
                        }
                        }
                    });

            }
        };

        new Thread(rnbl).start();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        //e.printStackTrace();
        Toast t= new Toast(getApplicationContext());
        t.setText( "1:" + e.getMessage());
        t.show();
    }

     final Button nxt= (Button)findViewById(R.id.btnNext);
     final Button prv=(Button)findViewById(R.id.btnPrev);
     nxt.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter++;
            if(counter>=ls.size()){counter=0;}
            bz.loadUrl(ls.get(counter));

        }
    });
     prv.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter--;
            if (counter<0){counter=ls.size()-1;}
            bz.loadUrl(ls.get(counter));
        }
    });
     tb.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(tb.isChecked()){nxt.setEnabled(false);prv.setEnabled(false);}else{nxt.setEnabled(true);prv.setEnabled(true);}

        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.report_viewer, menu);
    //MenuItem itm=menu.findItem(R.menu.report_viewer);
    //itm.setVisible(false);
    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);
}
}
package com.CorpoServe.bvgindialtd;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.regex.Pattern;
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.net.URI;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入android.os.Bundle;
导入android.os.Handler;
导入android.os.StrictMode;
导入android.support.v7.app.ActionBarActivity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.webkit.WebView;
导入android.widget.Button;
导入android.widget.Toast;
导入android.widget.ToggleButton;
公共类ReportViewer扩展了ActionBarActivity{
List ls=新的ArrayList();
int计数器=0;
Handler-hnd;
切换按钮tb;
网络视图bz;
公共字符串GetIntenetData(字符串URL)引发异常{
BufferedReader in=null;
字符串数据=null;
//URL=”http://corposerve.com/ActionPage.asp?action=auth&uid=abc&pwd=abc";
试一试{
HttpClient cl=新的DefaultHttpClient();
uriws=新的URI(URL);
HttpGet rq=新的HttpGet();
rq.setURI(ws);
HttpResponse rs=cl.execute(rq);
in=新的BufferedReader(新的InputStreamReader(rs.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串l=“”;
字符串nl=System.getProperty(“line.separator”);
而((l=in.readLine())!=null){
sb.追加(l+nl);
}
in.close();
data=sb.toString();
返回数据;
}最后{
if(in!=null){
试一试{
in.close();
返回数据;
}捕获(例外e){
e、 printStackTrace();
}
}
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u report\u viewer);
如果(android.os.Build.VERSION.SDK_INT>9){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
}
试一试{
字符串Url=”http://203.90.76.206/newmis/GetReportList.aspx";
字符串ss[]=GetIntenetData(Url.split(System.getProperty(“line.separator”));
ls.clear();
for(字符串s:ss){
字符串[]x=s.split(Pattern.quote(“*”);
ls.添加(”http://203.90.76.206/newmis“+x[0]);
}
bz=(WebView)findviewbyd(R.id.Brz);
bz.getSettings().SetBuilTinZoomControl(true);
bz.getSettings().setSupportZoom(true);
bz.getSettings().setUseWideViewPort(true);
bz.getSettings().setLoadWithOverview模式(true);
loadUrl(ls.get(0));
tb=(切换按钮)findViewById(R.id.tbX);
计数器=0;
hnd=新处理程序();
Runnable rnbl=新的Runnable(){
@凌驾
公开募捐{
//TODO自动生成的方法存根
试一试{
睡眠(10000);
}捕获(例外e){
//TODO:处理异常
}
hnd.post(新Runnable(){
@凌驾
公开募捐{
//TODO自动生成的方法存根
if(tb.isChecked()){
计数器++;
如果(计数器>=ls.size()-1){
计数器=0;
}
loadUrl(ls.get(counter));
}
}
});
}
};
新线程(rnbl.start();
}捕获(例外e){
//TODO自动生成的捕捉块
//e、 printStackTrace();
Toast t=新Toast(getApplicationContext());
t、 setText(“1:+e.getMessage());
t、 show();
}
最终按钮nxt=(按钮)findViewById(R.id.btnNext);
最终按钮prv=(按钮)findViewById(R.id.btnPrev);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
计数器++;
如果(计数器>=ls.size()){counter=0;}
loadUrl(ls.get(counter));
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
计数器--;

如果(counter我必须承认我没有尝试过你的代码,但是已经有很多事情需要你去做了。首先,你不应该从你的活动的
onCreate()
调用你的
GetIntenetData()
[sic]方法。这会阻塞你的UI线程,而且不应该

以下是一些对初学者有用的资源:

  • 活动生命周期:
  • 进程和线程:(如上所述,在后台使用
    AsyncTask
    通常是一种很好的工作方式,例如加载web内容)
巴斯