AsyncTask中怎么让doInBackground执行完再执行onPostExecute方法

各位好,我在做一个手机缓存的扫描,需要在doInBackground()里扫描应用信息,并通过publishProgress()把应用传给onProgressUpdate(),并刷新进度条,并把没有缓存的应用显示出来,最后把有缓存的集合在onPostExecute()方法中置顶显示,可是doInBackground()没执行完,onPostExecute()就执行完了,求解决,代码如下:

package com.yufei.testmobilesafe.activities;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.RemoteException;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.yufei.testmobilesafe.R;
import com.yufei.testmobilesafe.base.BaseActivity;
import com.yufei.testmobilesafe.domain.AppInfo;

public class SpeedSystemActivity extends BaseActivity {

private ImageView mIvLine;
private TextView mTvCache;
private TextView mTvPackageName;
private ProgressBar mPdProgress;
private ImageView mIvIcon;
private List<View> cacheVeiws=new ArrayList<View>();
private List<AppInfo> mCache = new ArrayList<AppInfo>();
private Context mContext;
private LinearLayout mllItems;
private Button bt_clear;

@Override
public void initView() {

    setContentView(R.layout.activity_clean_cache);
    mContext = this;
    mllItems = (LinearLayout) findViewById(R.id.ll_items);
    mIvIcon = (ImageView) findViewById(R.id.iv_icon);
    mPdProgress = (ProgressBar) findViewById(R.id.pd_progress);
    mTvPackageName = (TextView) findViewById(R.id.tv_pacakgename);
    mTvCache = (TextView) findViewById(R.id.tv_cachesize);
    mIvLine = (ImageView) findViewById(R.id.iv_line);
    bt_clear = findView(R.id.bt_clear);
}

@Override
public void initListener() {

    bt_clear.setOnClickListener(this);
}

@Override
public void initData() {

    AsyncTask<Void, AppInfo, Void> asyncTask = new AsyncTask<Void, AppInfo, Void>() {

        private int total = 1;
        private int progress = 0;

        /***
         * 方法 准备
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            startAnimation();
            // 准备工作
            mPdProgress.setMax(100);
            mPdProgress.setProgress(0);
            mTvCache.setText("缓存大小:0.00");
            mTvCache.setVisibility(View.INVISIBLE);
            mTvPackageName.setText("");
            cacheVeiws.clear();
        }

        /***
         * 方法
         * 
         * @param params
         * @return 子线程后台运行
         */
        @Override
        protected Void doInBackground(Void... params) {
            // 加载数据
            mCache.clear();
            loadData();// 边加载还得边更新
            return null;
        }

        /***
         * 方法
         * 
         * @param result
         *            加载结束
         */
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            cleanAnimation();
            // 加载结束
            mTvCache.setVisibility(View.VISIBLE);
            int cache = 0;
            for (AppInfo item : mCache) {
                cache += item.cacheSize;
            }
            mTvCache.setText("缓存大小:" + Formatter.formatFileSize(mContext, cache));

           //添加到顶部
            for(View view:cacheVeiws)
            {
                mllItems.addView(view, 0);// 顶部
            }
            cacheVeiws.clear();
        }

        /***
         * 方法 加载过程中的更新
         * 
         * @param values
         */
        @Override
        protected void onProgressUpdate(AppInfo... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
            final AppInfo appInfo = values[0];
            mCache.add(appInfo);
            // 更新
            mIvIcon.setImageDrawable(appInfo.icon);
            mTvPackageName.setText(appInfo.appName);
            progress += 1;

            int percent = (int) (progress * 100f / total + 0.5f);
            // 更新进度条
            mPdProgress.setProgress(percent);
            View itemView = View.inflate(mContext, R.layout.item_cache_info, null);

            ImageView ivIcon = (ImageView) itemView.findViewById(R.id.iv_icon);
            TextView appName = (TextView) itemView.findViewById(R.id.tv_appname);
            TextView cacheSize = (TextView) itemView.findViewById(R.id.tv_cachesize);
            TextView clean = (TextView) itemView.findViewById(R.id.tv_clean);
            ivIcon.setImageDrawable(appInfo.icon);
            appName.setText(appInfo.appName);
            cacheSize.setText(Formatter.formatFileSize(mContext, appInfo.cacheSize));
            // 有缓存要显示扫把
            if (appInfo.cacheSize > 0) {
                clean.setVisibility(View.VISIBLE);

// mllItems.addView(itemView, 0);// 顶部
cacheVeiws.add(itemView);
clean.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        Intent intent = new Intent();
                        intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
                        intent.addCategory("android.intent.category.DEFAULT");
                        intent.setData(Uri.parse("package:" + appInfo.packageName));
                        startActivity(intent);
                    }
                });
            } else {
                clean.setVisibility(View.INVISIBLE);
                mllItems.addView(itemView,0);
            }
        }

        /***
         * 方法
         */
        private void loadData() {
            // data/data/包名/cache
            // 查询所有的安装程序
            PackageManager packageManager = getPackageManager();
            // 安装记录
            List<PackageInfo> list = packageManager.getInstalledPackages(0);
            total = list.size();
            Method method = null;
            try {
                Class<?> clz = Class.forName("android.content.pm.PackageManager");
                // 如果碰到一个类找不到 1.是@hide 反射 2.可能是aidl 复制到对应包下 -工具自动生成接口与实现Stub
                Method[] declaredMethods = clz.getDeclaredMethods();

                for (Method m : declaredMethods) {
                    if (TextUtils.equals(m.getName(), "getPackageSizeInfo") && m.getParameterTypes().length == 2) {
                        method = m;
                        break;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            for (PackageInfo item : list) {
                try {
                    IPackageStatsObserver stub = new IPackageStatsObserver.Stub() {
                        // 统计完一个cache大小的时候
                        @Override
                        public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
                            try {
                                // 封装
                                AppInfo appInfo = new AppInfo();
                                appInfo.cacheSize = pStats.cacheSize;
                                appInfo.packageName = pStats.packageName;
                                // 图标与应用名
                                PackageManager pm = getPackageManager();
                                PackageInfo packageInfo = pm.getPackageInfo(appInfo.packageName, 0);
                                ApplicationInfo applicationInfo = packageInfo.applicationInfo;
                                appInfo.icon = applicationInfo.loadIcon(pm);
                                appInfo.appName = applicationInfo.loadLabel(pm).toString();

                                // 提交给页面显示
                                publishProgress(appInfo);// -->onProgressUpdate
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    };
                    method.invoke(packageManager, item.packageName, stub);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    };

    asyncTask.execute();
}

@Override
public void process(View view) {

    switch (view.getId()) {
    //清理缓存
    case R.id.bt_clear:

        clearApps();
        break;

    }
}


public void clearApps() {
    try {
        IPackageDataObserver stub = new IPackageDataObserver.Stub() {
            // 所有应用cache数据已被清空
            @Override
            public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // 重新查询
                        Toast.makeText(mContext, "清理干净了!", Toast.LENGTH_SHORT).show();
                        finish();

                    }
                });
            }
        };
        PackageManager packageManager = getPackageManager();
        Class<?> clz = Class.forName("android.content.pm.PackageManager");
        Method[] methods = clz.getDeclaredMethods();
        Method method = null;
        for (Method m : methods) {
            if (TextUtils.equals("freeStorageAndNotify", m.getName())) {
                method = m;
                break;
            }
        }
        if (method != null) {
            method.invoke(packageManager, Long.MAX_VALUE, stub);
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


private void startAnimation() {
    int type = TranslateAnimation.RELATIVE_TO_PARENT;
    TranslateAnimation ta = new TranslateAnimation(type, 0f, type, 0f, type, 0f, type, 1f);
    // 时长
    ta.setDuration(1000);
    ta.setRepeatCount(Animation.INFINITE);//
    ta.setRepeatMode(Animation.REVERSE);
    mIvLine.startAnimation(ta);
}

private void cleanAnimation() {
    mIvLine.clearAnimation();
}

}

3个回答

我最近也遇到同样的问题,还没有解决,貌似是子线程与主线程执行不同步问题

看懂了,是这样的,你在loadData()方法加载数据的时候用到 IPackageStatsObserver stub = new IPackageStatsObserver.Stub() {},这个类执行onGetStatsCompleted() 方法时会开辟一个子线程,在子线程中进行相关操作。这样的话相当于你调用AsyncTask的doInBackground()方法在子线程中执行任务时,这个子线程有开辟了一个子线程中执行耗时操作,而onPostExecute()之后在doInBackground()的线程执行完成后才执行,所有不是等onGetStatsCompleted()这个线程执行完才执行,所以,AppInfo 的信息无法在onPostExecute()里面更新。
解决方案:等onGetStatsCompleted()执行完再去执行onPostExecute(),可以设置flag,等onGetStatsCompleted()执行完后flag改为true,然后通知onPostExecute()进行执行。
m0_37307670
上下求索l 嗯,66666
接近 3 年之前 回复

doInBackground方法不要返回null。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在AsyncTask中执行doInBackground()时发生错误

<div class="post-text" itemprop="text"> <p>Hi i am using the <code>AsyncTask</code> in order to get data from a php files But when i run the application i get this error !</p> <pre><code>List&lt;Online_Messages_item&gt; o; public class RequestPostsTask extends AsyncTask&lt;Void, Void, Boolean&gt; { ProgressDialog pdLoading; @Override protected void onPreExecute() { pdLoading = new ProgressDialog(Messages_online.this); pdLoading.setProgressStyle(ProgressDialog.STYLE_SPINNER); pdLoading.setMessage("please wait ..."); pdLoading.setIndeterminate(false); pdLoading.setCancelable(false); pdLoading.show(); } @Override protected Boolean doInBackground(Void... params) { boolean status = false; HttpURLConnection urlConnection = null; try { URL url = new URL("my url"); urlConnection = (HttpURLConnection) url.openConnection(); Charset charset = Charset.forName("UTF8"); int responseCode = urlConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), charset)); if (in != null) { StringBuilder strBuilder = new StringBuilder(); int ch = 0; while ((ch = in.read()) != -1) strBuilder.append((char) ch); String response = strBuilder.toString(); Log.d("Server response:", response); JSONObject jObject = new JSONObject(response); JSONArray jsonArray = jObject.getJSONArray("posts"); for(int i=0; i&lt;jsonArray.length(); i++){ Online_Messages_item omi = new Online_Messages_item(); omi.setId(jsonArray.getJSONObject(i).getLong("ID")); omi.settext(jsonArray.getJSONObject(i).getString("Text")); omi.setlikes(jsonArray.getJSONObject(i).getString("Likes")); omi.setpt(jsonArray.getJSONObject(i).getString("PublishTime")); o.add(omi); } if(o.size() &gt;= 1) status = true; } in.close(); } } catch(MalformedURLException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } finally { urlConnection.disconnect(); } return status; } @Override protected void onPostExecute(Boolean result) { BaseAdapter ba=new Messages_online_adapter(Messages_online.this,o); listView.setAdapter(ba); pdLoading.dismiss(); } } </code></pre> <p>and here is the logcat</p> <pre><code>03-13 08:12:05.111: E/AndroidRuntime(1232): FATAL EXCEPTION: AsyncTask #1 03 -13 08:12:05.111: E/AndroidRuntime(1232): java.lang.RuntimeException: An error occured while executing doInBackground() 03-13 08:12:05.111: E/AndroidRuntime(1232): at android.os.AsyncTask$3.done(AsyncTask.java:299) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.lang.Thread.run(Thread.java:856) 03-13 08:12:05.111: E/AndroidRuntime(1232): Caused by: java.lang.NullPointerException 03-13 08:12:05.111: E/AndroidRuntime(1232): at mr.zereshk.online.Messages_online$RequestPostsTask.doInBackground(Messages_online.java:80) 03-13 08:12:05.111: E/AndroidRuntime(1232): at mr.zereshk.online.Messages_online$RequestPostsTask.doInBackground(Messages_online.java:1) 03-13 08:12:05.111: E/AndroidRuntime(1232): at android.os.AsyncTask$2.call(AsyncTask.java:287) 03-13 08:12:05.111: E/AndroidRuntime(1232): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 03-13 08:12:05.111: E/AndroidRuntime(1232): ... 4 more </code></pre> <p>Any Help ? Thanks in advance!</p> </div>

AsyncTask的onPostExecute()没有执行,DoInBackground执行了。

package com.kisentech.cloudrun.domain; import android.os.AsyncTask; import android.util.Log; import com.kisentech.cloudrun.listener.OnLoadShareDataListener; import com.kisentech.cloudrun.util.ShareInformation; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; public class ShareData extends AsyncTask<Void,Void,List<ShareInformation>> { //服务端地址 private String urlPath; //数据集合 private List<ShareInformation>shareInformations; //回调接口 private OnLoadShareDataListener onLoadShareDataListener; //客户端与服务端的链接通道 private HttpURLConnection httpURLConnection=null; public ShareData(String urlPath){ this.urlPath=urlPath; shareInformations=new ArrayList<>(); } /** * 根剧url地址获取客户端与服务端之间的流通道 * @param urlPath 服务端地址 */ public InputStream getInputStream(String urlPath){ Log.v("test","getInputStream"); InputStream inputStream=null; try { URL url=new URL(urlPath); httpURLConnection= (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("GET"); httpURLConnection.setConnectTimeout(8000); httpURLConnection.setDoInput(true); // int requestCode=httpURLConnection.getResponseCode(); // if(requestCode!=200){ // Log.v("test","connect lose!"); // }else{ // Log.v("test","connecting"); // } inputStream=httpURLConnection.getInputStream(); } catch (Exception e) { Log.v("test","getInputStream发生异常"); e.printStackTrace(); } return inputStream; } /** * 将json对象从流中读出转化为字符串 * @param inputStream 客户端与服务端之间的流通道 * @return json字符串 */ private String jsonToString(InputStream inputStream){ Log.v("test","jsonToString"); String jsonString=""; int length; byte[]buff=new byte[1024]; ByteArrayOutputStream baos=new ByteArrayOutputStream(); try { while ((length = inputStream.read(buff)) != -1) { baos.write(buff,0,length); } jsonString=new String(baos.toByteArray()); }catch (Exception e){ e.printStackTrace(); Log.v("test","jsonString發生異常"); }finally { if(httpURLConnection!=null){ httpURLConnection.disconnect(); } } return jsonString; } /** * 解析从服务器中传来的json字符传对象 * @param jsonString json字符串 */ private void parseJsonString(String jsonString){ Log.v("test","pareseJsonString"); try { JSONArray jsonArray=new JSONArray(jsonString); for (int i=0;i<jsonArray.length();i++){ JSONObject jsonObject=jsonArray.getJSONObject(i); ShareInformation shareInformation=setShareInformation(jsonObject); shareInformations.add(shareInformation); } } catch (JSONException e) { e.printStackTrace(); Log.v("test","parseJsonString發生異常"); } } /** * 为shareInformation赋值 * @param jsonObject 信息的来源 * @return 赋值后的ShareInformation对象 * @throws JSONException */ private ShareInformation setShareInformation(JSONObject jsonObject) throws JSONException { Log.v("test","setShare"); ShareInformation shareInformation=new ShareInformation(); shareInformation.setHeadImageId(jsonObject.getInt("headImage")); shareInformation.setName(jsonObject.getString("name")); shareInformation.setTextContent(jsonObject.getString("textContent")); shareInformation.setLikeImage(jsonObject.getInt("likeImage")); shareInformation.setCommentImage(jsonObject.getInt("commentImage")); return shareInformation; } /** * 为ShareData添加监听 * @param onLoadShareDataListener */ public void setOnLoadShareDataListener(OnLoadShareDataListener onLoadShareDataListener){ this.onLoadShareDataListener=onLoadShareDataListener; } @Override protected List<ShareInformation> doInBackground(Void... params) { Log.v("test","doInBack"); InputStream inputStream=getInputStream(urlPath); String jsonString=jsonToString(inputStream); parseJsonString(jsonString); return shareInformations; } @Override protected void onPostExecute(List<ShareInformation> shareInformations) { Log.d("test","onPost"); for(ShareInformation s:shareInformations) Log.v("test",s.toString()); if (shareInformations!=null&&onLoadShareDataListener!=null){ onLoadShareDataListener.loadShareInformationData(shareInformations); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/201604/23/1461379010_379916.png) ```

AysncTask的 doInBackground()不执行

写了一个模拟提交的asynctask 这里是方法调用,如果存在task的话不会继续执行该方法 ![图片说明](https://img-ask.csdn.net/upload/201511/17/1447741095_617886.jpg) 没有的话就新建,原本是用execute(),不执行就换了这个试试 ![图片说明](https://img-ask.csdn.net/upload/201511/17/1447741170_278149.jpg) 然后是task ![图片说明](https://img-ask.csdn.net/upload/201511/17/1447741129_41484.jpg) ![图片说明](https://img-ask.csdn.net/upload/201511/17/1447741232_130102.jpg) ![图片说明](https://img-ask.csdn.net/upload/201511/17/1447741242_272155.jpg) 打印的日志显示onPreExecute()是执行了的,但是doInBackGround()也不执行

asynctask doinbackground和onpostexcute是在一个线程里的吗?

asynctask doinbackground和onpostexcute是在一个线程里的吗?

android的异步加载,为啥我的AsyncTask里的doInBackground里没有getJsonData()方法啊??

![图片说明](https://img-ask.csdn.net/upload/201911/27/1574785389_604391.png) 如图啊,啥都能get,就是Json没有get,啥原因啊,版本吗? 我看也没人问,只有我没有吗??

asynctask 从服务器获取JSON数据并解析 Android doInBackground没执行完就执行onPostExecute

``` class mAsyncTask extends AsyncTask<String, String, List<UnbindOlder>> { @Override protected List<UnbindOlder> doInBackground(String... params) { Log.i("doInBackground","0000000000000000000"); if(userid!=null) { String url = "http://192.168.1.200:8080/onecard/app/older/getNoBindOlderByUser"; OkHttpUtils.post(url)// .url(url)// .params("userId", userid)// .execute(new StringCallback() { @Override public void onSuccess(String s, Call call, Response response) { JsonData jsonData = judgeJsonDataFormat(s); int state = jsonData.getState(); String json = new Gson().toJson(jsonData.getResult()); if (json != null && !TextUtils.isEmpty(json.toString())) { try { unbindOlderList = new Gson().fromJson(json, new TypeToken<ArrayList<UnbindOlder>>() {}.getType()); Log.i("parseDataByGson",unbindOlderList.get(1).getIdCode()); } catch (Exception e) { Log.e("1234", e.toString()); } } } }); } return unbindOlderList; } @Override protected void onPostExecute(final List<UnbindOlder> unbindOlderList) { super.onPostExecute(unbindOlderList); Log.i("onPostExecute","0000000000000000000"); if(unbindOlderList.size()>0){Log.i("onPostExecute","unbindOlderList.size()>0");} mAddolderAdapter = new AddolderAdapter(my,userid,unbindOlderList); mListView.setAdapter(mAddolderAdapter); } } ``` doInBackground里解析数据还没解析完就执行了onPostExecute 先打印了Log.i("doInBackground","0000000000000000000"); 然后打印了 Log.i("onPostExecute","0000000000000000000"); 最后打印Log.i("parseDataByGson",unbindOlderList.get(1).getIdCode()); 怎么解决解析数据延迟的问题,适配器需要加载解析后的数据

解析json问题,采用异步asynctask,已经执行了DoInBackground,但OnPostExcute不被调用

![图片说明](https://img-ask.csdn.net/upload/201908/23/1566571092_743048.jpg)![图片说明](https://img-ask.csdn.net/upload/201908/23/1566571113_161288.jpg) AndroidStudio给出的提示我是新手不太懂 ,我网上搜了一下说要在某处地方加个东西,朋友们这个应该怎么解决

AsyncTask 里的代码不能执行

程序中有一个 AsyncTask 方法,当程序退出之前会被执行。它可以得到当前位置并解析 xml配置文件。当前位置被检索了,但是解析操作未执行。 在 Main Activity 中调用 AsyncTask public void quitApplication() { FinishProcess fProcess = new FinishProcess(); fProcess.execute(this); } AsyncTask: public class FinishProcess extends AsyncTask<Main, Void, Void> { @Override protected Void doInBackground(Main... params) { LocationHandler lh = new LocationHandler(); try { lh.getLocationSingle(null, params[0]); } catch (InterruptedException e) { e.printStackTrace(); } parseXML(params[0]); return null; } private void parseXML(Main params) { String ANDROID_ID = "android:id"; Resources resources = params.getResources(); try { InputStream fXmlFile = resources.openRawResource(R.raw.pages); //Reads xml file and gets the node types and attributes DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); NodeList nList = doc.getElementsByTagName("*"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println(eElement.getNodeName()); } } } catch (Exception e) { System.out.println("Catch"); e.printStackTrace(); } } }

从AsyncTask中获取数据的问题

MainActivity调用 DataCall.getJSON方法,然后触发AsyncTask。但是我不确定如何将数据返回到原始的Activity。如何从AsyncTask中获取数据? MainActivity调用 DataCall,应该返回一个字符串并将其保存在state_data。 String state_data = DataCall.getJSON(spinnerURL,spinnerContentType); DataCall: public class DataCall extends Activity { private static final String TAG = "MyApp"; private class DownloadWebPageTask extends AsyncTask<String, Void, String> { protected String doInBackground(String... urls) { String response = ""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { HttpResponse execute = client.execute(httpGet); InputStream content = execute.getEntity().getContent(); BufferedReader buffer = new BufferedReader( new InputStreamReader(content)); String s = ""; while ((s = buffer.readLine()) != null) { response += s; } } catch (Exception e) { e.printStackTrace(); } } return response; } protected void onPostExecute(String result) { //THIS IS WHERE I NEED TO RETURN MY DATA TO THE MAIN ACTIVITY. (I am guessing) } } public void getJSON(String myUrlString, String contentType) { DownloadWebPageTask task = new DownloadWebPageTask(); task.execute(new String[] { "http://www.mywebsite.com/" + myUrlString }); } }

如何从 AsyncTask 中启动一个intent?

我想 从doInBackground() 方法中启动一个AsyncTask里的Activity,但它似乎并没有启动。 调用AsyncTask的时候,通过使用params[0]来传递 Activity public class StartProcess extends AsyncTask<Main, Void, Main> { @Override protected Main doInBackground(Main... params) { return params[0]; } protected void onPostExecute(Main... params) { // TODO Auto-generated method stub System.out.println("post"); Intent loc = new Intent(params[0],LocationHandler3.class); loc.putExtra("locationType",0); loc.putExtra("startEndType",0); params[0].startActivity(loc); } }

初学AsyncTask,为什么只执行构造方法,剩下的四个方法什么都不执行,为啥呀

public class M extends AsyncTask<Void,Integer,Boolean>{ TextView t; protected Context context; public M(TextView t,Context context) { this.t=t; this.context=context; Toast.makeText(context, "进入构造方法", Toast.LENGTH_SHORT).show(); } protected void onPreExecute() { } protected Boolean doInBackground(Void...params) { new Thread(new Runnable() { public void run() { Toast.makeText(context, "开始睡眠", Toast.LENGTH_SHORT).show(); for(int i=0;i<60;i++) { try { Thread.sleep(1000); } catch(Exception e) {} publishProgress(i); Toast.makeText(context, "i", Toast.LENGTH_SHORT).show(); } } }); return true; } protected void onprogressUpdate(Integer...values) { Toast.makeText(context, "执行UI设置", Toast.LENGTH_SHORT).show(); t.setText(values[0]); } protected void onpostExcute(Boolean result) { if(result) { Toast.makeText(context, "结束", Toast.LENGTH_SHORT).show(); //Toast.makeText(context, "即使一分钟完成", Toast.LENGTH_SHORT).show(); } } } 大神们帮我看看呗,现在学习进度实在是进行不下去了,一直卡在这个地方

Asynctask更新UI的问题?

子线程不能更新UI,但是Asynctask能更新UI,是为什么?

如何在执行Asynctask的时候显示一个ProgressDialog对话框

安卓新手,目前在独立做一个自己的小项目,发现有些地方搞不太懂。 项目里有一个继承自Asynctask的Task类,doInBackground方法是用OkHttp来Post网页获得返回值。 看网上的资料是说主线程操作写在onPreExecute方法里比如显示一个进度条或者对话框,但是我这个是一个独立的类,获取不到MainActivity的Context,使用MyApplication的getContext方法会报一个异常(忘记叫啥了,好像是没有父布局)。 但是如果把这个类写到MainActivity里的话,我是用的静态方法调用这个方法的。 现在我的项目里就使用的是Thread.sleep方法,这种体验很不好,而且网络不好的时候会崩溃。 求教各位应该怎么做,就是点击按钮,显示进度条对话框,等异步任务完成了跳转到另一个Activity中 谢谢了

将两个值从doInBackground传递给onPostExecute

<div class="post-text" itemprop="text"> <p>i have this code:</p> <pre><code>static class Tarea1 extends AsyncTask&lt;ListView, Void, ArrayAdapter&lt;mostrar_alumnos&gt;&gt; { Context contexto; ListView list; InputStream is; ArrayList&lt;mostrar_alumnos&gt; listaalumnos = new ArrayList&lt;mostrar_alumnos&gt;(); public void cargarContenido (Context contexto) { this.contexto= contexto; } @Override protected ArrayAdapter&lt;mostrar_alumnos&gt; doInBackground(ListView... params) { list = params[0]; String resultado = "fallo"; mostrar_alumnos alum; mostrar_curso_clase_asignatura asign; HttpClient cliente = new DefaultHttpClient(); String URL = "http://"+ip_conexion.IP_Server+"/android/sesion_profesor.php?dia_semana="+dia_semana+"&amp;campo_hora="+campo_hora+"&amp;id_usuario="+id_usuario+""; Log.i("httpget", URL); HttpGet peticionGet = new HttpGet(URL); try{ HttpResponse response = cliente.execute(peticionGet); HttpEntity contenido = response.getEntity(); is = contenido.getContent(); }catch (ClientProtocolException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } BufferedReader buferlector = new BufferedReader (new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String linea = null; try{ while((linea = buferlector.readLine())!=null) { sb.append(linea); } }catch (IOException e) { e.printStackTrace(); } try{ is.close(); }catch (IOException e) { e.printStackTrace(); } resultado = sb.toString(); Log.d("Debug", "Resultado: " + resultado); Pair p=new Pair(); try{ JSONArray arrayJson = new JSONArray(resultado); for(int i= 0; i&lt;arrayJson.length();i++){ JSONObject objetoJson = arrayJson.getJSONObject(i); alum = new mostrar_alumnos(objetoJson.getInt("id_alumno"), objetoJson.getString("nombre"), objetoJson.getString("apellidos")); JSONObject objetoJson2 = arrayJson.getJSONObject(arrayJson.length()-1); String asignatura = new mostrar_curso_clase_asignatura(objetoJson2.getInt("curso"), objetoJson2.getString("clase"), objetoJson2.getString("asignatura")).toString(); //mTxtView1.setText(asignatura); listaalumnos.add(alum); p.asignatura=asignatura; } }catch (JSONException e){ e.printStackTrace(); } ArrayAdapter&lt;mostrar_alumnos&gt; adaptador = new ArrayAdapter&lt;mostrar_alumnos&gt;(contexto, android.R.layout.simple_list_item_1, listaalumnos); //Contexto de ver clientes (Muestra la lista con los datos de clientes que le he pasado p.result=adaptador; return p; } public class Pair { public ArrayAdapter&lt;mostrar_alumnos&gt; result; public String asignatura; } protected void onPostExecute(Pair p) { list.setAdapter(p.result); mTxtView1.setText(p.asignatura); } } </code></pre> <p>}</p> <p>And i would like to show in the Activity, at the top the text view with "curso", "clase" and "asignatura" and below, the list of pupils with "nombre", asignatura" and "id_alumno".</p> <p>However, here it says that cannot resolve these variables:</p> <pre><code>protected void onPostExecute(Pair p) { list.setAdapter(result); mTxtView1.setText(asignatura); } } </code></pre> <p>result and asignatura.</p> <p>The JSON Output is this:</p> <pre><code>[{"id_alumno":"109","nombre":"Cristian","apellidos":"Ari\u00f1o Garc\u00eda"},{"id_alumno":"110","nombre":"Amanda","apellidos":"Barbastro Cauh\u00e9"},{"id_alumno":"111","nombre":"Manuel","apellidos":"Barcel\u00f3 Borrell"},{"id_alumno":"112","nombre":"Alejandro","apellidos":"Bueno Bel\u00edo"},{"id_alumno":"113","nombre":"Alba","apellidos":"Casanova Alquillu\u00e9"},{"id_alumno":"114","nombre":"Gema","apellidos":"Cortijo Romance"},{"id_alumno":"115","nombre":"Raquel","apellidos":"De la Fuente Tirado"},{"id_alumno":"116","nombre":"\u00c1lvaro","apellidos":"Del ni\u00f1o Jes\u00fas Mu\u00f1oz"},{"id_alumno":"117","nombre":"Alejandro","apellidos":"Escudero Cerd\u00e1"},{"id_alumno":"118","nombre":"Olaya","apellidos":"Fern\u00e1ndez Luengo"},{"id_alumno":"119","nombre":"Noelia","apellidos":"Fern\u00e1ndez Palacios"},{"id_alumno":"120","nombre":"Paloma","apellidos":"Ib\u00e1\u00f1ez P\u00e9rez"},{"id_alumno":"121","nombre":"Pablo","apellidos":"L\u00f3pez Chico"},{"id_alumno":"122","nombre":"Bruno","apellidos":"Mart\u00edn Viver"},{"id_alumno":"123","nombre":"Javier","apellidos":"Mart\u00ednez Zapata"},{"id_alumno":"124","nombre":"Daniel","apellidos":"Mill\u00e1n Vidal"},{"id_alumno":"125","nombre":"Javier","apellidos":"Ort\u00edn Gual"},{"id_alumno":"126","nombre":"Andrea","apellidos":"Palacio Sanz"},{"id_alumno":"127","nombre":"Gloria","apellidos":"P\u00e9rez Pascual"},{"id_alumno":"128","nombre":"Sol","apellidos":"P\u00e9rez Sabroso"},{"id_alumno":"129","nombre":"Gonzalo","apellidos":"Pina Cubero"},{"id_alumno":"130","nombre":"Roc\u00edo","apellidos":"Portillo G\u00f3mez"},{"id_alumno":"131","nombre":"Juan","apellidos":"Prades Fern\u00e1ndez"},{"id_alumno":"132","nombre":"Claudia","apellidos":"Rivero P\u00e9rez"},{"id_alumno":"133","nombre":"Victor","apellidos":"Rodrigo De la Cruz"},{"id_alumno":"134","nombre":"Alba","apellidos":"Rosales Salas"},{"id_alumno":"135","nombre":"Eduardo","apellidos":"Ru\u00edz Palacios"},{"id_alumno":"136","nombre":"Miguel","apellidos":"Sanz G\u00f3mez"},{"id_alumno":"137","nombre":"Nayara","apellidos":"Sole Rivero"},{"id_alumno":"138","nombre":"Valeriy ","apellidos":"Zuazo Egea"},{"curso":"2","clase":"B","asignatura":"Matem\u00e1ticas"}] </code></pre> <p>How can i solve this problem?</p> <p>Thanks!</p> </div>

AsyncTask在执行时执行崩溃应用程序

<div class="post-text" itemprop="text"> <p>The user must add a marker by tapping the map. My goal is to send the Name, Category, Latitude and Longitude to a SQL database. I followed this issue: <a href="https://stackoverflow.com/questions/12069669/how-can-you-pass-multiple-primitive-parameters-to-asynctask">How can you pass multiple primitive parameters to AsyncTask?</a>, but the <strong><em>app crashes when I hit the button</em></strong> which calls the <code>shopReg</code>. <strong><em>Also</em></strong>, maybe there is something wrong with the communication between my app and the WampServer. I wonder if the connection URL is correct. I found on the Internet that the <strong><em>default WAMP localhost IP</em></strong> is 10.0.2.2. See the code:</p> <p><strong>AddShopActivity.java</strong></p> <pre><code>public class AddShopActivity extends MainScreen implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener { Spinner spinner; ArrayAdapter&lt;CharSequence&gt; adapter; GoogleMap mGoogleMap; GoogleApiClient mGoogleApiClient; String Name, Category; Double Latitude, Longitude; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_shop); initMap(); spinner = (Spinner) findViewById(R.id.spinner); adapter = ArrayAdapter.createFromResource(this, R.array.eidoskatastimatos, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } private void initMap() { MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mGoogleMap = googleMap; mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mGoogleMap.getUiSettings().setZoomControlsEnabled(true); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); mGoogleApiClient.connect(); } LocationRequest mLocationsRequest; @Override public void onConnected(Bundle bundle) { mLocationsRequest = LocationRequest.create(); mLocationsRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationsRequest.setInterval(5000); if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &amp;&amp; ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationsRequest, this); mGoogleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { EditText shop_name = (EditText)findViewById(R.id.editName); Spinner shop_category = (Spinner)findViewById(R.id.spinner); MarkerOptions marker = new MarkerOptions() .position(new LatLng(latLng.latitude, latLng.longitude)) .draggable(true) .title(shop_name.getText().toString()) .snippet(shop_category.getSelectedItem().toString()); CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, 16); mGoogleMap.animateCamera(update); mGoogleMap.clear(); mGoogleMap.addMarker(marker); Name = shop_name.getText().toString(); Category = shop_category.getSelectedItem().toString(); Latitude = latLng.latitude; Longitude = latLng.longitude; } }); } public void shopReg(View view) { String method = "save"; BackgroundTask backgroundTask = new BackgroundTask(this); new BackgroundTask(method,Name,Category,Latitude,Longitude).execute(); finish(); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } @Override public void onLocationChanged(Location location) { if (location == null){ Toast.makeText(this, "Can't get current location", Toast.LENGTH_LONG).show(); } else { LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, 16); mGoogleMap.animateCamera(update); } } } </code></pre> <p><strong>BackgroundTask.java</strong></p> <pre><code>public class BackgroundTask extends AsyncTask&lt;String,Void,String&gt; { String Name, Category; Double Latitude, Longitude; BackgroundTask(String method, String Name, String Category, Double Latitude, Double Longitude) { this.Name = Name; this.Category = Category; this.Latitude = Latitude; this.Longitude = Longitude; } Context ctx; BackgroundTask(Context ctx){ this.ctx = ctx; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { String reg_url = "http://10.0.2.2/shop/register.php"; String method = params[0]; if(method.equals("save")) { String Name = params[1]; String Category = params[2]; Double Latitude = Double.parseDouble(params[3]); Double Longitude = Double.parseDouble(params[4]); try { URL url = new URL(reg_url); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); OutputStream OS = httpURLConnection.getOutputStream(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8")); String data = URLEncoder.encode("Name", "UTF-8") +"="+URLEncoder.encode(Name,"UTF-8")+"&amp;"+ URLEncoder.encode("Category", "UTF-8") +"="+URLEncoder.encode(Category,"UTF-8")+"&amp;"+ URLEncoder.encode("Latitude", "UTF-8") +"="+URLEncoder.encode(String.valueOf(Latitude),"UTF-8")+"&amp;"+ URLEncoder.encode("Longitude", "UTF-8") +"="+URLEncoder.encode(String.valueOf(Longitude),"UTF-8"); bufferedWriter.write(data); bufferedWriter.flush(); bufferedWriter.close(); OS.close(); InputStream IS = httpURLConnection.getInputStream(); IS.close(); return "Το κατάστημα προστέθηκε!"; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(String result) { Toast.makeText(ctx,result,Toast.LENGTH_LONG).show(); } } </code></pre> <p><strong>register.php</strong></p> <pre><code>&lt;?php require"init.php"; $Name=$_POST["Name"]; $Category=$_POST["Category"]; $Latitude=$_POST["Latitude"]; $Longitude=$_POST["Longitude "]; $sql_query="insert into shop_info values('$Name','$Category','$Latitude','$Longidude');"; ?&gt; </code></pre> <p><strong>init.php</strong></p> <pre><code>&lt;?php $db_name="shops"; $mysql_user="root"; $mysql_pass=""; $server_name="localhost"; ?&gt; </code></pre> </div>

在 AsyncTask 中不能调用 onPostExecute 方法

我想从数据库服务器中获取数据,但是却不能在 UI 主线程上执行网络工作。我找到的解决方案是 AsyncTask 。我重写了两个方法 onPostExecute, doInBackground,但是重写doInBackground方法后,onPostExecute就不能再被调用,并且android手机(galaxy s2) 还强迫程序停止运行。哪里出错呢? public class MainActivity extends Activity { EditText mResult; private static final String TAG = "JSON"; String Json; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mResult = (EditText)findViewById(R.id.result); Button btn = (Button)findViewById(R.id.parse); btn.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v){ getHtml("http://192.168.0.12/index.php"); //Json = getHtml("http://192.168.0.12/index.php"); Log.i(TAG, Integer.toString(5)); Log.i(TAG, Json); Log.i(TAG, Integer.toString(6)); try{ String Result = "member list: \n"; JSONArray ja = new JSONArray(Json); for(int j=0; j<ja.length(); j++) { JSONObject order = ja.getJSONObject(j); Result +="ID : " + order.getInt("id") + " " + "number : " + order.getInt("gisoo")+ " " + "name : " + order.getString("name")+ " " + "sex : " + order.getString("sex")+ " " + "age : " + order.getInt("age")+ " " + "school : " + order.getString("university")+ " " + "phone : " + order.getString("phone")+ " " + "no : " + order.getInt("numberOfVolunteer")+ " " + "lastlogin : " + order.getString("lastLogin")+ " " + "lastactivity : " + order.getString("lastVolunteer")+ " " + "message : " + order.getString("message")+ "\n\n"; } mResult.setText(Result); } catch(JSONException e) { Toast.makeText(v.getContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } } }); } private void getHtml(String url) { new ProcessHtmlTask().execute(url); } private class ProcessHtmlTask extends AsyncTask<String, Void, String>{ @Override protected void onPostExecute(String JSON){ Log.i(TAG, Integer.toString(8)); //I couldn't see number 8 in log. Json = JSON; return; } @Override protected String doInBackground(String... addr){ StringBuilder jsonHtml = new StringBuilder(); HttpURLConnection conn; try{ URL url = new URL(addr[0]); conn = (HttpURLConnection)url.openConnection(); if(conn != null) { conn.setConnectTimeout(10000); conn.setUseCaches(true); int n = conn.getResponseCode(); Log.i(TAG, Integer.toString(n)); if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "EUC-KR")); for(;;){ String line = br.readLine(); if(line == null) break; jsonHtml.append(line + "\n"); } Log.i(TAG, Integer.toString(3)); br.close(); } Log.i(TAG, Integer.toString(4)); conn.disconnect(); } } catch(Exception ex){ Log.i(TAG, ex.getMessage()); } Log.i(TAG, jsonHtml.toString()); Log.i(TAG, Integer.toString(5)); //I checked html string and number 5 showed up in log. return jsonHtml.toString(); } }

AsyncTask中的execute方法在android studio中报错

我的android studio中的AsyncTask的execute方法在编辑框中飘红报错, 提示"Cannot resolve method 'execute(java.lang.string)'",类名那里也会有红色下划线报错.但是不影响程序,程序可以正常运行.总觉得这样看着不舒服

AsyncTask 不能调用onPostExecute()方法

`enter code here`AsyncTask类如下: class Load extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... aurl) { //do job seconds //stop at here, and does not run onPostExecute } @Override protected void onPostExecute(String unused) { super.onPostExecute(unused); wait = false; new Load().execute(); } } 另外一个方法如下: public void click() { new Load().execute(); while(wait) { ; } } wait是boolean值。 为什么AsyncTask 不能调用onPostExecute()方法呢?

Fragment如何获取主Activity中的AsyncTask的返回值并更新内部ListView?

如题,Activity中执行了一个获取数据的AsyncTask任务,activity内嵌入的Fragment里的ListView想要更新需要用到该异步任务返回的数据,如何获取?

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 JVM内存结构 JVM构成 说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐