آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در ترد

کامیار  10 سال پیش  10 سال پیش
0 0

سلام

میخوام خواندن اطلاعات یک صفحه در وب را با یک ترد دیگر انجام دهم ولی امکان پذیر نیست و ارور می دهد .

برای اینکه این کار را main thread انجام دهد از سه خط کد کامنت شده استفاده میکنم ولی با ترد جداگانه ارور می دهد

package com.example.tamrin;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AlertDialog;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;



import android.os.Bundle;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button)findViewById(R.id.btn1);
    /*    StrictMode.ThreadPolicy.Builder builder = new StrictMode.ThreadPolicy.Builder();
        ThreadPolicy policy = builder.permitNetwork().build();
        StrictMode.setThreadPolicy(policy);*/
        btn.setOnClickListener(new OnClickListener() {           
            @Override
            public void onClick(View v) {
               
                new Thread( new Runnable() {
                    public void run() {
                        String address = "http://www.varzesh3.com";
                        URL url;
                        try {
                            url = new URL(address);
                            HttpURLConnection conection = (HttpURLConnection)url.openConnection();
                            conection.connect();
                            InputStream input = conection.getInputStream();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
                            String a = "";
                            String b = "";
                            while ((a = reader.readLine()) != null) {
                                b += a + "\n";
                               
                            }
                            TextView txt = (TextView)findViewById(R.id.txt1);
                            txt.setText(b);
                           
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }).start();       
    }
});       
    }       
}
   
       

   
       
       

0 0
داداش کد هاتو توی تگ مربوط به کد بزار که خوانا تر بشه (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
کامیار  10 سال پیش
0 0

 package com.example.tamrin;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AlertDialog;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;



import android.os.Bundle;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button)findViewById(R.id.btn1);
    /*    StrictMode.ThreadPolicy.Builder builder = new StrictMode.ThreadPolicy.Builder();
        ThreadPolicy policy = builder.permitNetwork().build();
        StrictMode.setThreadPolicy(policy);*/
        btn.setOnClickListener(new OnClickListener() {           
            @Override
            public void onClick(View v) {
               
                new Thread( new Runnable() {
                    public void run() {
                        String address = "http://www.varzesh3.com";
                        URL url;
                        try {
                            url = new URL(address);
                            HttpURLConnection conection = (HttpURLConnection)url.openConnection();
                            conection.connect();
                            InputStream input = conection.getInputStream();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
                            String a = "";
                            String b = "";
                            while ((a = reader.readLine()) != null) {
                                b += a + "\n";
                               
                            }
                            TextView txt = (TextView)findViewById(R.id.txt1);
                            txt.setText(b);
                           
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }).start();       
    }
});       
    }       
}
 
 
0 0
Thread thread = new Thread() فکر کنم این طوری باید تعریف کنی و داخلش runable بزاری (10 سال پیش)
0 0
باید کد هایی که رو ui تاثیر میگزارند رو داخل هندل اجرا کنید . (10 سال پیش)
0 0
هندلر (10 سال پیش)
0 0
منظورتون دو خط کد textview است؟ (10 سال پیش)
0 0
نشد (10 سال پیش)
0 0
بله باید از هندلر استفاده بشه (10 سال پیش)
0 0
بخوام از new handler().post استفاده کنم باید متغیر b final شود و امکان پذیر نیست و b را در سطح کلاس تعریف کردم ولی بازم نشد . (10 سال پیش)
0 0
آموزش استاد در بخش شمارشگر معکوس رو مطالعه کنید (10 سال پیش)
0 0
ممنونم (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .