Android,ListView做新聞?lì)^條

效果圖


image.png

MainActivity 寫(xiě)

package com.example.yanchenglong;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    private ListView listview;
    private Button Refresh;
    ArrayList<Boolean> mBooleanArrayList=new ArrayList<Boolean>();//添加刷新
    ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 404:
                    Toast.makeText(MainActivity.this, "抱歉訪問(wèn)不到", Toast.LENGTH_SHORT).show();
                    break;
                case 0x110:
                    mMyadapter = new Myadapter(MainActivity.this, array, listview,mBooleanArrayList);
                    listview.setAdapter(mMyadapter);
                    mMyadapter.Refresh(mBooleanArrayList);
                    break;
            }
        }
    };
    private Myadapter mMyadapter;

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

    private void init() {
        listview = (ListView) findViewById(R.id.listview);
        Refresh = (Button) findViewById(R.id.Refresh);
        Refresh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                array.clear();
                Refreshtext();
            }
        });
        Refreshtext();
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                mBooleanArrayList.add(i,true);
                mBooleanArrayList.remove(i+1);
                mMyadapter.Refresh(mBooleanArrayList);
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                intent.putExtra("urlwebview", array.get(i).get("urlwebview"));
                startActivity(intent);
            }
        });
    }

    private void Refreshtext() {
        new Thread() {
            @Override
            public void run() {
                try {
                    URL url = new URL("http://v.juhe.cn/toutiao/index?type=&key=2ca3a5b1cb6edf55250bff550ac34325");
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setConnectTimeout(3000);
                    urlConnection.setReadTimeout(3000);
                    urlConnection.setDoInput(true);
                    urlConnection.setDoOutput(true);
                    urlConnection.connect();
                    if (urlConnection.getResponseCode() == 200) {
                        InputStream inputStream = urlConnection.getInputStream();
                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                        byte[] data = new byte[1024];
                        int lenth = -1;
                        while ((lenth = inputStream.read(data)) != -1) {
                            byteArrayOutputStream.write(data, 0, lenth);
                            byteArrayOutputStream.flush();
                        }
                        byteArrayOutputStream.close();
                        inputStream.close();
                        String s = byteArrayOutputStream.toString();
                        JSONObject jsonObject = new JSONObject(s);
                        int error_code = jsonObject.getInt("error_code");
                        if (error_code == 0) {
                            JSONObject result = jsonObject.getJSONObject("result");
                            JSONArray data1 = result.getJSONArray("data");
                            for (int i = 0; i < data1.length(); i++) {
                                JSONObject jsonObject1 = data1.getJSONObject(i);
                                String category = jsonObject1.getString("author_name");
                                String title = jsonObject1.getString("title");
                                String date = jsonObject1.getString("date");
                                String urlwebview = jsonObject1.getString("url");
                                String thumbnail_pic_s = jsonObject1.getString("thumbnail_pic_s");
                                HashMap<String, String> stringStringHashMap = new HashMap<>();
                                stringStringHashMap.put("category", category);
                                stringStringHashMap.put("title", title);
                                stringStringHashMap.put("date", date);
                                stringStringHashMap.put("urlwebview", urlwebview);
                                stringStringHashMap.put("thumbnail_pic_s", thumbnail_pic_s);
                                array.add(stringStringHashMap);//上面執(zhí)行刪除
                                handler.sendEmptyMessage(0x110);
                            }
                        } else {
                            handler.sendEmptyMessage(404);
                        }

                    } else {
                        handler.sendEmptyMessage(404);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    handler.sendEmptyMessage(404);

                }

            }
        }.start();


    }
}

activity_main.xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.yanchenglong.MainActivity">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
    </ListView>

    <Button
        android:id="@+id/Refresh"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="刷新數(shù)據(jù)"/>
</LinearLayout>

MyAdapter 適配器

package com.example.yanchenglong;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

import static com.example.yanchenglong.R.id.textView4;

/**
 * Created by Administrator on 2018/7/13 0013.
 */

public class Myadapter extends BaseAdapter implements AbsListView.OnScrollListener {
    ArrayList<HashMap<String, String>> array;
    Context context;

    private ImageLoader mImageLoader;
    private int mStart, mEnd;
    private boolean mFirsrIn;

    public static String[] URLS;//用來(lái)保存獲取當(dāng)前圖片的URL地址

    ArrayList<Boolean> mBooleanArrayList;

    public Myadapter(Context context, ArrayList<HashMap<String, String>> array, ListView listview, ArrayList<Boolean> mBooleanArrayList) {
        this.context = context;
        this.array = array;
        this.mBooleanArrayList=mBooleanArrayList;
        mImageLoader = new ImageLoader(listview);//對(duì)ListView操作

        URLS = new String[array.size()];//空間大小

        for (int i = 0; i < array.size(); i++) {
            URLS[i] = array.get(i).get("thumbnail_pic_s");
        }

        listview.setOnScrollListener(this);
        mFirsrIn = true;

    }

    @Override
    public int getCount() {
        return array.size();
    }

    @Override
    public Object getItem(int i) {
        return array.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    Dataf dataf = null;
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        if (view == null) {
            dataf = new Dataf();
            view = View.inflate(context, R.layout.item, null);
            dataf.itemImage = view.findViewById(R.id.item_image);
            dataf.textView2 = view.findViewById(R.id.textView2);
            dataf.textView3 = view.findViewById(R.id.textView3);
            dataf.textView4 = view.findViewById(textView4);
            view.setTag(dataf);
        } else {
            dataf = (Dataf) view.getTag();
        }
//        new MyTask(dataf.itemImage).execute(array.get(i).get("thumbnail_pic_s"));
//        DownImage downImage = new DownImage(array.get(i).get("thumbnail_pic_s"));
//        downImage.loadImage(new DownImage.ImageCallBack() {
//            @Override
//            public void getDrawable(Drawable drawable) {
//                dataf.itemImage.setImageDrawable(drawable);
//            }
//        });

        String url = array.get(i).get("thumbnail_pic_s");
        dataf.itemImage.setTag(url);//綁定對(duì)應(yīng)的圖片Url
        //調(diào)用showimagebythread把圖片和圖片URL傳過(guò)去
//        new ImageLoader().showimagebythread(dataf.itemImage,url);
        mImageLoader.showImageByAsyncTask(dataf.itemImage, url);

        dataf.textView2.setText(array.get(i).get("category"));

        dataf.textView4.setText(array.get(i).get("title"));
        mBooleanArrayList.add(false);//添加標(biāo)記
        if(mBooleanArrayList.get(i)){
            dataf.textView4.setTextColor(Color.parseColor("#999999"));
        }
        dataf.textView3.setText(array.get(i).get("date"));
        return view;

    }

    @Override
    public void onScrollStateChanged(AbsListView absListView, int i) {
        if (i == SCROLL_STATE_IDLE) {//停止?fàn)顟B(tài)
            //加載可見(jiàn)項(xiàng)
            mImageLoader.loadImages(mStart, mEnd);
        } else {
            //停止加載
            mImageLoader.cancelAllTasks();
        }
    }
    public void Refresh(ArrayList<Boolean> mBooleanArrayList){
        this.mBooleanArrayList=mBooleanArrayList;
        notifyDataSetChanged();
    }

    @Override//參數(shù)二是第一個(gè)可見(jiàn)元素的位置,第三個(gè)是當(dāng)前可見(jiàn)元素的長(zhǎng)度
    public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int i2) {
        mStart = firstVisibleItem;
        mEnd = firstVisibleItem + visibleItemCount;
        //第一次顯示時(shí)候調(diào)用
        if (mFirsrIn && visibleItemCount > 0) {
            mImageLoader.loadImages(mStart, mEnd);
            mFirsrIn = false;
        }
    }

    class Dataf {
        private ImageView itemImage;//圖標(biāo)
        private TextView textView2;//標(biāo)題
        private TextView textView3;//時(shí)間
        private TextView textView4;//內(nèi)容
    }

    class MyTask extends AsyncTask<String, Integer, Bitmap> {
        ImageView ig;

        MyTask(ImageView ig) {
            this.ig = ig;
        }

        @Override
        protected Bitmap doInBackground(String... strings) {
            Log.d("data", strings[0]);
            URL url = null;
            try {
                url = new URL(strings[0]);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("GET");
                con.setReadTimeout(10000);
                con.setConnectTimeout(10000);
                con.connect();
                Log.d("data", con.getResponseCode() + "");
                if (con.getResponseCode() == 200) {
                    InputStream is = con.getInputStream();
                    return BitmapFactory.decodeStream(is);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            ig.setImageBitmap(bitmap);
        }
    }
}


適配器內(nèi)容布局adapter,item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal">

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="100dp"
        android:layout_height="100dp"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="標(biāo)題"/>

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentTop="true"
            android:text="是按"/>

        <TextView
            android:id="@+id/textView4"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:layout_below="@id/textView2"
            android:layout_centerVertical="true"
            android:text="內(nèi)容"/>
    </RelativeLayout>

</LinearLayout>

兩種方法可以
一 DownImage downImage = new DownImage(array.get(i).get("thumbnail_pic_s"));
DownImage類

package com.example.yanchenglong;

import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;

import java.net.URL;

/**
 * Created by Administrator on 2018/7/13 0013.
 */

public class DownImage {
    public String image_path;

    public DownImage(String image_path) {
        this.image_path = image_path;
    }

    public void loadImage(final ImageCallBack callBack) {

        final Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Drawable drawable = (Drawable) msg.obj;
                callBack.getDrawable(drawable);
            }

        };

        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    Drawable drawable = Drawable.createFromStream(new URL(
                            image_path).openStream(), "");

                    Message message = Message.obtain();
                    message.obj = drawable;
                    handler.sendMessage(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    public interface ImageCallBack {
        public void getDrawable(Drawable drawable);
    }
}

二就是MyTask異步
new MyTask(dataf.itemImage).execute(array.get(i).get("thumbnail_pic_s"));

 class MyTask extends AsyncTask<String,Integer,Bitmap> {
        ImageView ig;
        MyTask(ImageView ig){
            this.ig = ig;
        }
        @Override
        protected Bitmap doInBackground(String... strings) {
            Log.d("data",strings[0]);
            URL url = null;
            try {
                url = new URL(strings[0]);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("GET");
                con.setReadTimeout(10000);
                con.setConnectTimeout(10000);
                con.connect();
                Log.d("data",con.getResponseCode()+"");
                if(con.getResponseCode() == 200){
                    InputStream is = con.getInputStream();
                    return BitmapFactory.decodeStream(is);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            ig.setImageBitmap(bitmap);
        }
    }

三用緩存ImageLoader

package com.example.yanchenglong;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.LruCache;
import android.widget.ImageView;
import android.widget.ListView;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashSet;

/**
 * //異步加載圖片
 * Created by Administrator on 2018/7/14 0014.
 */

public class ImageLoader {
    public ImageView mImageView;
    //緩存Lru算法
    private LruCache<String, Bitmap> mCache;
    private ListView mListView;
    private HashSet<NewAsyncTask> mTask;

    public ImageLoader(ListView listview) {
        mListView = listview;
        mTask = new HashSet<>();
        //獲取最大可用內(nèi)存
        int maxMemoy = (int) Runtime.getRuntime().maxMemory();
        int cacheSize = maxMemoy / 4;
        //初始化
        mCache = new LruCache<String, Bitmap>(cacheSize) {
            @Override//用于獲取存放每一個(gè)對(duì)象的大小//加載正確的內(nèi)存大小
            protected int sizeOf(String key, Bitmap value) {
                //將Bitmap實(shí)際大小緩存進(jìn)去
                //在每次存入緩存的時(shí)候調(diào)用
                return value.getByteCount();//返回對(duì)象的實(shí)際大小
            }
        };
    }

    //增加到緩存
    public void addBitmapToCache(String url, Bitmap bitmap) {
        if (getBitmapFromCache(url) == null) {
            mCache.put(url, bitmap);
        }
    }

    //從緩存中獲取數(shù)據(jù)
    public Bitmap getBitmapFromCache(String url) {
        return mCache.get(url);
    }

//    Handler hanler = new Handler() {
//        @Override
//        public void handleMessage(Message msg) {
//            if (mImageView.getTag().equals(mUrl)) {
//                mImageView.setImageBitmap((Bitmap) msg.obj);
//            }
//        }
//    };

//    public void showimagebythread(ImageView imageView, final String url) {
//        mImageView = imageView;//item中的imageView付給了mImageView那么mImageView的更改就是把Item中修改
//        mUrl = url;//使用成員變量,將對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存從而避免網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致一個(gè)時(shí)序上的混亂
//        new Thread() {
//            @Override
//            public void run() {
//                Bitmap bitmap = getBitmapFromURL(url);
//                Message obtain = Message.obtain();
//                obtain.obj = bitmap;
//                hanler.sendMessage(obtain);
//            }
//        }.start();
//
//    }

    public Bitmap getBitmapFromURL(String urlstring) {
        Bitmap bitmap;
        InputStream is = null;
        try {
            URL url = new URL(urlstring);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            is = new BufferedInputStream(urlConnection.getInputStream());
            bitmap = BitmapFactory.decodeStream(is);
            urlConnection.disconnect();//釋放鏈接資源
            return bitmap;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    //用來(lái)加載從start到end的所有圖片
    public void loadImages(int start, int end) {
        for (int i = start; i < end; i++) {
            if (Myadapter.URLS.length >=0) {
                String url = Myadapter.URLS[i];
                //從緩存中取出對(duì)應(yīng)的圖片
                Bitmap bitmap = getBitmapFromCache(url);
                //如果緩存中沒(méi)有,必須去網(wǎng)絡(luò)下載
                if (bitmap == null) {
                    NewAsyncTask newAsyncTask = new NewAsyncTask(url);
                    newAsyncTask.execute(url);
                    mTask.add(newAsyncTask);
                } else {
                    ImageView imageview = (ImageView) mListView.findViewWithTag(url);//找到指定Tag來(lái)訪問(wèn)他對(duì)應(yīng)的ImageView
                    imageview.setImageBitmap(bitmap);
                }
            }
        }
    }

    public void cancelAllTasks() {
        if (mTask != null) {
            for (NewAsyncTask task : mTask) {
                task.cancel(false);//true是強(qiáng)制停止,false是執(zhí)行完取消
            }
        }
    }

    public void showImageByAsyncTask(ImageView imageview, String Url) {
        //從緩存中取出對(duì)應(yīng)的圖片
        Bitmap bitmap = getBitmapFromCache(Url);
        //如果緩存中沒(méi)有,必須去網(wǎng)絡(luò)下載
    if (bitmap == null&&imageview.getTag().equals(Url)) {//我在滾動(dòng)停止時(shí)加載了
//            imageview.setBackgroundResource(R.mipmap.ic_launcher);//正在下載
//            網(wǎng)絡(luò)下載
//            new NewAsyncTask(Url).execute(Url);
        } else {
            imageview.setImageBitmap(bitmap);
        }
    }

    private class NewAsyncTask extends AsyncTask<String, Void, Bitmap> {
//        private ImageView mImageView;
        private String mUrl;

        //傳遞ImageView構(gòu)造ImageView imageview,
        public NewAsyncTask(String url) {
//            mImageView = imageview;
            mUrl = url;
        }

        @Override
        protected Bitmap doInBackground(String... strings) {
            String url = strings[0];
            //從網(wǎng)絡(luò)獲取圖片
            Bitmap bitmapFromURL = getBitmapFromURL(strings[0]);
            if (bitmapFromURL != null) {
                //將不再緩存的圖片加入緩存
                addBitmapToCache(url, bitmapFromURL);
            }
            return bitmapFromURL;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
//            if (mImageView.getTag().equals(mUrl)) {
//                mImageView.setImageBitmap(bitmap);
//            }
            ImageView imageview = mListView.findViewWithTag(mUrl);
            if (imageview != null && bitmap != null&&imageview.getTag().equals(mUrl)) {
                imageview.setImageBitmap(bitmap);
            }
            mTask.remove(this);
        }
    }
}

main2Activity

package com.example.yanchenglong;

import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class Main2Activity extends AppCompatActivity {
    private WebView webview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        webview = (WebView) findViewById(R.id.webview);
        Intent intent = getIntent();
        if(intent!=null){
        String urlwebview = intent.getStringExtra("urlwebview");
        webview.loadUrl(urlwebview);
        webview.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                setTitle(url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
            }
        });
    }}
}

main2Activity布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    tools:context="com.example.yanchenglong.Main2Activity">
<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></WebView>
</LinearLayout>

還可以去Github搜索smart image view看看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矾湃,一起剝皮案震驚了整個(gè)濱河市聪轿,隨后出現(xiàn)的幾起案子锈津,更是在濱河造成了極大的恐慌注簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饶碘,死亡現(xiàn)場(chǎng)離奇詭異普舆,居然都是意外死亡撩独,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)胜卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疆导,“玉大人,你說(shuō)我怎么就攤上這事葛躏〕憾危” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵舰攒,是天一觀的道長(zhǎng)败富。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摩窃,這世上最難降的妖魔是什么兽叮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮猾愿,結(jié)果婚禮上鹦聪,老公的妹妹穿的比我還像新娘。我一直安慰自己蒂秘,他們只是感情好泽本,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著姻僧,像睡著了一般规丽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上段化,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天嘁捷,我揣著相機(jī)與錄音,去河邊找鬼显熏。 笑死雄嚣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缓升,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鼓鲁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了港谊?” 一聲冷哼從身側(cè)響起骇吭,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歧寺,沒(méi)想到半個(gè)月后燥狰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斜筐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年龙致,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顷链。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡目代,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗤练,到底是詐尸還是另有隱情榛了,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布煞抬,位于F島的核電站霜大,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏此疹。R本人自食惡果不足惜僧诚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝗碎。 院中可真熱鬧湖笨,春花似錦、人聲如沸蹦骑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)眠菇。三九已至边败,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捎废,已是汗流浹背笑窜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留登疗,地道東北人排截。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓嫌蚤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親断傲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脱吱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容