想法是开始聊天.所以我在班上有这个属性:
private MulticastSocket so;
private EditText messageBoard;
private InetAddress serverAddress;
private int port;
Run Code Online (Sandbox Code Playgroud)
然后我在onCreate()方法中有这个代码:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
// connect to server
connect();
// Associate a variable with the Button on the interface
final Button sendButton = (Button) findViewById(R.id.button2);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// when the button is clicked the next screen is loaded
sendMessage();
}
});
} // end of onCreate
Run Code Online (Sandbox Code Playgroud)
这是我的connect()方法: …
在我的应用程序中得到android.os.NetworkOnMainThreadException.我正试图从网址获取图像,当时我得到了这个Exception.如果我在2.2中运行应用程序它工作正常,但如果我在4.0上运行获得异常.
public static Bitmap getBitmap(String url)
{
Bitmap bitmap = null;
try
{
// replace space with url encoded character.
url = url.replace(" ", "%20");
// System.out.println("url : " + url);
URL urll = new URL(url);
InputStream in = (InputStream) urll.getContent();
bitmap = BitmapFactory.decodeStream(in);
}
catch ( MalformedURLException e )
{
e.printStackTrace();
}
catch ( IOException e )
{
e.printStackTrace();
}
if ( bitmap == null )
bitmap = BitmapFactory.decodeResource(resources, R.drawable.noimage);
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
我收到了错误
InputStream …Run Code Online (Sandbox Code Playgroud) 在我看来,我并没有真正从MainActivity调用URL,网络操作.
但例外仍然发生:
public class MainActivity extends ActionBarActivity {
private final String LOG_TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ProcessData test = new ProcessData();
test.doInBackground("mysql") ;
}
//separate file ProcessData.java
public class ProcessData extends AsyncTask<String, Void, String> {
public String createValidUrl(String s){
.....//code in this method works fine
}
public String doInBackground(String ...params){
String validUrl = createValidURL(params[0]);
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
URL url = new URL(validUrl);
urlConnection = …Run Code Online (Sandbox Code Playgroud) android android-asynctask asynctaskloader networkonmainthread
我知道GUI线程上不允许网络操作.对我没问题.但为什么在Dialog按钮单击回调上使用此代码仍然产生NetworkOnMainThreadException?
new Thread(new Runnable() {
@Override
public void run() {
heavyAndTimeConsumingOperation();
}
}).run();
Run Code Online (Sandbox Code Playgroud)
也许我不会以这种方式产生一个新线程?
networking multithreading android exception networkonmainthread
由于ActionBarSherlock的问题,我将我的Manifest更改为目标API 16,从那时起我检查当前正在播放的歌曲的处理程序不再有效.它在我下面标记的行上抛出NetworkOnMainThreadException.
我究竟做错了什么?我以为我的多线程设置正确.
这是我的代码:
handler = new Handler();
updateSongTask = new Runnable() {
public void run() {
Log.d("asdf", "scraper started");
Scraper scraper = new ShoutCastScraper(); // THIS LINE throws the exception
List<Stream> streams;
try {
streams = scraper.scrape(new URI(url));
for (Stream stream : streams) {
Intent songIntent = new Intent(CUSTOM_INTENT);
String[] songAndArtist = songAndArtist(stream.getCurrentSong());
songIntent.putExtra("song", songAndArtist[0]);
songIntent.putExtra("artist", songAndArtist[1]);
songIntent.putExtra("stationurl", url);
sendBroadcast(songIntent);
Log.d("asdf", "should send broadcast" );
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.postDelayed(this, …Run Code Online (Sandbox Code Playgroud) multithreading android asynchronous handler networkonmainthread
我编写了一个从Android设备发送电子邮件的应用程序但是当我尝试发送电子邮件时出现以下异常:
android.os.NetworkOnMainThreadException
为什么会发生这种情况,我该如何解决?
我正在尝试检查Android上的互联网连接(实际连接,而不是网络访问)NetworkOnMainThreadException.因此,我试图把它变成一个AsyncTask.
这是我的isConnected()方法:
if(!checkNetwork(parent)){
return false;
}
if(!checkConnection(url)){
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
现在,我通过使用来检查连接,if(isConnected())但我得到了异常.所以我需要做的是将上面的方法移动到AsyncTask并检索它返回的值.
我想也许我可以创建一个跟踪它的全局变量,但是我不确定在AsyncTask设置它之前或之后是否会返回我的值.
我确信有办法做到这一点,所以我正在寻找如何做到这一点的想法.任何建议表示赞赏!
编辑:我已经更新了我的代码以使用AsyncTask,如果这看起来更好,请告诉我:
ConnectUtils.java:
public class ConnectUtils {
private static boolean hasConnected, hasChecked;
public boolean isConnected(Context parent, String url){
hasChecked = false;
this.new CheckURL(parent, url).execute();
while(!hasChecked){ }
return hasConnected;
}
private class CheckURL extends AsyncTask<Void, Void, Boolean>{
private Context parent;
private String url;
public CheckURL(Context parent, String url){
this.parent = parent;
this.url = url;
}
@Override
protected Boolean …Run Code Online (Sandbox Code Playgroud) 我正在制作Android 4.4项目.我有NetworkOnMainThreadException.以下是我的流程.
Service(sticky) -> Handler(per 5 minutes) -> Runnable -> HttpPost
Run Code Online (Sandbox Code Playgroud)
Runnable不是一个单独的线程吗?我在Runnable中使用AsyncTask吗?
我打电话sendPhoneNumberHandler从@OnClick哪个意味着正常得到NetworkOnMainThreadException.为了解决这个问题,我使用@WorkerThread了允许方法调用在UI /主线程之外运行的注释.相比之下,我仍然有NetworkOnMainThreadException.
@WorkerThread
public void sendPhoneNumberHandler(final Context context, String phoneNumber) {
MonoApplication application = MonolApplication.get(phoneNumberMvpView.getContext());
rx.Observable<HeaderResponse> checkPhoneNumber =
application.getMonolService(Constants.monolAPIUrl).checkPhoneNumber(phoneNumber);
subscription = checkPhoneNumber.subscribe(new Observer<HeaderResponse>() {
@Override public void onCompleted() {
}
@Override public void onError(Throwable e) {
phoneNumberMvpView.onPhoneNumberSendResult(false, 0);
}
@Override public void onNext(HeaderResponse s) {
phoneNumberMvpView.onClearText();
phoneNumberMvpView.onPhoneNumberSendResult(true, s.getError());
}
});
}
Run Code Online (Sandbox Code Playgroud)
任何线索?
我正在做门户网站应用程序.
通过使用AsyncTask <>我获取json值并显示.
我的应用程序在Android 2.3.3中运行良好,但是当我在Android 4.1.2中运行该应用程序时,它会抛出错误.我已经使用google并根据它进行了更改,但我仍然在4.1.2中收到错误
我在清单中也包括了这行...
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
我也删除了runOnUiThread部分,onPostExecute(String file_url)之后它也抛出了错误.
任何帮助,将不胜感激.
我的代码
class LoadAllgroups extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_type);
}
protected String doInBackground(String... args) {
// here my codes
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
gnamelist=new ArrayList<String>(new LinkedHashSet<String>(gnamelist));
runOnUiThread(new Runnable() {
public void run() {
createExpandableListViewDialog();
}
});
return;
}
}
Run Code Online (Sandbox Code Playgroud)
logcat的
07-29 00:29:47.860: E/AndroidRuntime(947): FATAL EXCEPTION: main
07-29 00:29:47.860: E/AndroidRuntime(947): android.os.NetworkOnMainThreadException
07-29 00:29:47.860: E/AndroidRuntime(947): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
07-29 …Run Code Online (Sandbox Code Playgroud) android ×10
exception ×2
java ×2
asynchronous ×1
handler ×1
networking ×1
runnable ×1
smtpclient ×1