[Original Post]

https://www.itsalif.info/content/android-volley-tutorial-http-get-post-put


[Download JAR]

http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.mcxiaoke.volley%22


[GitHub]

https://github.com/mcxiaoke/android-volley


----------

Google released Android Volley Library around May/June 2013, which has been internally used by Google for some time. It is supposed to provide Fast Networking Operations and also takes care of Threads nicely. If you are unfamiliar with Volley, please see Google I/O 2013 Video

Unfortunately, there is almost no documentation on Volley. So, I put together code snippets on how to make Volley HTTP Requests (GET, POST, PUT, DELETE).


[Setting up Android Volley Library]

Setting up is straight-forward. Clone the Volley project from here and then import the Volley into project. A comprehensive tutorial on setting up can be found here.


[Key Classes of Android Volley]

The following are the Key classes of Volley:

– RequestQueue: A Queue containing the Network/HTTP Requests that needs to be made.

– Request: A Base Class which contains Network related information like HTTP Methods.

– StringRequest: HTTP Request where the response is parsed a String. View Source

– JsonObjectRequest: HTTP Request where the response is JSONObject. View Source



[Getting Started with Android Volley]

At first make a RequestQueue, which holds the HTTP Requests. View Source. Ideally, the RequestQueue should be made once and then referred to it across the Application. The Application is an ideal place to make it.

--------------

RequestQueue queue = Volley.newRequestQueue(this);  // this = context



[Making GET Requests]

Making GET Requests is simple. The example below uses JsonObjectRequest. It prepares a JsonObjectRequest and

passes and then adds it to RequestQueue. The JsonObject accepts 4 parameters (Http method, Url, Json values, Response Listener – Invoked on success, Error Listener – Invoked on failure).

-------------

final String url = "http://httpbin.org/get?param1=hello";

 

// prepare the Request

JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,

    new Response.Listener<JSONObject>() 

    {

        @Override

        public void onResponse(JSONObject response) {   

                        // display response     

            Log.d("Response", response.toString());

        }

    }, 

    new Response.ErrorListener() 

    {

         @Override

         public void onErrorResponse(VolleyError error) {            

            Log.d("Error.Response", response);

       }

    }

);

 

// add it to the RequestQueue   

queue.add(getRequest);



[Making POST Requests]

For a POST request, to add form parameters/values, the getParams() method needs to be overridden and a Map needs to be returned.

----------------

url = "http://httpbin.org/post";

StringRequest postRequest = new StringRequest(Request.Method.POST, url, 

    new Response.Listener<String>() 

    {

        @Override

        public void onResponse(String response) {

            // response

            Log.d("Response", response);

        }

    }, 

    new Response.ErrorListener() 

    {

         @Override

         public void onErrorResponse(VolleyError error) {

             // error

             Log.d("Error.Response", response);

       }

    }

) {     

    @Override

    protected Map<String, String> getParams() 

    {  

            Map<String, String>  params = new HashMap<String, String>();  

            params.put("name", "Alif");  

            params.put("domain", "http://itsalif.info");

             

            return params;  

    }

};

queue.add(postRequest);



[Making PUT Requests]

Creating PUT Request is same as POST basically.

---------------

url = "http://httpbin.org/put";

StringRequest putRequest = new StringRequest(Request.Method.PUT, url, 

    new Response.Listener<String>() 

    {

        @Override

        public void onResponse(String response) {

            // response

            Log.d("Response", response);

        }

    }, 

    new Response.ErrorListener() 

    {

         @Override

         public void onErrorResponse(VolleyError error) {

                         // error

             Log.d("Error.Response", response);

       }

    }

) {

 

    @Override

    protected Map<String, String> getParams() 

    {  

            Map<String, String>  params = new HashMap<String, String> ();  

            params.put("name", "Alif");  

            params.put("domain", "http://itsalif.info");

             

            return params;  

    }

 

};

 

queue.add(putRequest);



[Making DELETE Requests]

------------

url = "http://httpbin.org/delete";

StringRequest dr = new StringRequest(Request.Method.DELETE, url, 

    new Response.Listener<String>() 

    {

        @Override

        public void onResponse(String response) {

            // response

            Toast.makeText($this, response, Toast.LENGTH_LONG).show();

        }

    }, 

    new Response.ErrorListener() 

    {

         @Override

         public void onErrorResponse(VolleyError error) {

             // error.

              

       }

    }

);

queue.add(dr);



저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

https://github.com/beworker/pinned-section-listview



Introduction

Easy to use ListView with pinned sections for Android 2.1 and higher. Pinned section is a header view which sticks to the top of the list until at least one item of that section is visible.

Alt text  Alt text  Alt text

Features

This list properly implements many features which are missing from other implementations. These are

  • Fast scroll
  • Headers and footers
  • Clickable pinned sections

Besides this it doesn't create any unnecessary views, layouts etc. It's really lean.

Watch this video to see PinnedSectionListView in action.

Usage

  1. Replace standard ListView with com.hb.views.PinnedSectionListView in your layout.xml file.
  <com.hb.views.PinnedSectionListView
      android:id="@android:id/list"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" 
      />
  1. Extend your ListAdapter in a way that it implements PinnedSectionListAdapter interface, in addition to what it already implements. Basically you need to add a singleisItemViewTypePinned(int viewType) method. This method must return true for all view types which have to be pinned.
  // Our adapter class implements 'PinnedSectionListAdapter' interface
  class MyPinnedSectionListAdapter extends BaseAdapter 
          implements PinnedSectionListAdapter {

      ...

      // We implement this method to return 'true' for all view types we want to pin
      @Override
      public boolean isItemViewTypePinned(int viewType) {
          return viewType == <type to be pinned>;
      }
  }

That's all. You are done! A working example can also be found in example folder.

Used by

Let us know if you use this library in your application and we will mention it here.

Grocery Sum

License

Copyright 2013-2014 Sergej Shafarenka, halfbit.de

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

About this project

nexpaq allows you to easily customize, enhance, and add features to your smartphonethrough the case. To put it simply: You can add and remove physical “modules” (think Lego bricks with special powers) directly from the back of your case without powering down! 

It's time to allow your phone to do things it was really made for. Unlimited potential all in the palm of your hand.

Each nexpaq case has built-in battery power to boot (1000 mAh). This provides your smartphone with a significant amount of extra juice and powers all of the modules.

nexpaq offers full module compatibility between iOS and Android smartphones, and works across multiple generations of phones. In other words, you can use your modules on different smartphones and even on future smartphones not yet released!

There are 12 modules currently available including: 

AND THIS IS JUST THE BEGINNING…... It's important for us to build an open platform so *you* can dream up module ideas and developers make them a reality!!

If you have an iPhone 6, Samsung Galaxy S6 Edge or Samsung Galaxy S5 then you can use nexpaq. We are looking to expand the lineup so please let us know on our website poll what smartphones you want nexpaq to work with!

iPhone, Android? No need to choose. Nexpaq modules are 100% cross-platform!

We're not done breaking ground here. nexpaq is also the first, and only, modular technology that can be swapped between Android and iPhone devices. What does this mean? Collect and share modules with other nexpaq users, regardless of their operating system allegiance! Next step, world peace... 

It also means that if you decide to change smartphones you'll still be able to use your modules on your new phone, as long as you have a nexpaq case for it.

1. Put your phone in the nexpaq case

2. Choose your modules and slide them in

3. Start the app and control your modules 

You can access all of your modules through the app. Simply click on the module to check a reading of how much storage and battery you have. When you swap in a new module, the app will automatically update so you can get going straight away.

Even if your case is not attached to your phone, you can still switch on the case and remotely control the modules via bluetooth from your nexpaq app.

A lot of heart went into nexpaq’s design. The key was to keep your phone looking good while packing in lots of functions. Take a look at these few design concepts and mock ups from the last 18 months:

Hand designs :

A brief look at the history of nexpaq in design:

The journey doesn't end when you receive your nexpaq and starter modules.  We've built nexpaq from the ground up as a device from and for the people.

The Developer Kit is the first step in cultivating an ever-growing community that will bring nexpaq to limits we've only yet dreamed of. We will also be building a community and marketplace that brings users and developers together to share ideas and create modules that will truly let everyone get what they want out of their smartphone.

Developers, here is your call to action. Grab a kit and from day one and start creating modules that will usher in an amazing era.

This is how we’ve got to where we are today and our future plans: 

The four modules in each set are enough to entirely fill the 6 slots of the nexpaq case.(The battery module takes 3 slots)

However you can add as many modules to your reward as you want, you simply need to add their corresponding amounts to your pledge.

For example: one laser + one extra battery = 14 usd + 14 usd = 28 usd (afterwards we will contact you to confirm your module choice) 

If you want to be one of the first to get your hands on nexpaq, then this is for you. We want to give you early access and hear your feedback. The Beta version is actually not that Beta, it retains exactly the same functionality as the regular nexpaq and is compatible with many of the same modules including:

* Hot key module

* LED module

* Temperature and humidity module

* Pollution module

* Breathalyzer module

* Laser module

* Battery module

We worked hard to complete all the R&D and now we need you to help us to finalize design production and purchase tooling for mass production. 

We are excited to be the first company to create a modular smartcase solution and we think that Kickstarter is the perfect place to get feedback on our product and help us bring it to market.

Risks and challenges

Any hardware products, especially a modular general purpose product like nexpaq, comes with its risks and challenges. The nexpaq team has been working hard to address every one of them so we can deliver a high quality product which fulfills your expectations and more.

Our first priority is the reliability and longevity of our product, specifically all of the components that move, slide, and plug in and out. We have already made more than 100 designs and prototypes to select the best working and looking. We will repeat all lifetime tests under different conditions, 10,000 cycles or more with the final tooling before mass production.

Our next, but top, priority is to provide an easy to use modular product which is highly customizable and where the modules work identically, cross-platform for Android, iOS and for any upcoming future operating systems. Our technology is developed, tested and working on Samsung Galaxy S4, S5, S6 and iPhone 5 and 6.

Our team has great experience in developing products from the ground up, leading to mass production and we are confident that we’ll be able to deliver a great product and overcome any other challenges.

https://www.kickstarter.com/projects/nexpaq/nexpaq-the-first-truly-modular-smartphone-case?ref=category_recommended

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

프로세스가 읽기가 안되는 파이프에 쓰려고 한다면, 커널로 부터 SIGPIPE 신호를 받게 된다. 이것은 두개 이상의 프로세스가 파이프라인에 포함되어 있을 때 필수적이다. 

참고로, 모든 시그널이 임의의 쓰레드로 전달되는 것은 아닙니다. 
SIGFPE (부동 소수점 연산 오류), SIGSEGV (메모리 접근 오류) 등과 같이 명백하게 시그널을 발생시킨 쓰레드가 정해져 있는 경우는 해당 쓰레드에게 시그널이 전달됩니다. 이런 시그널을 synchronous signal 이라고 하는데, SIGPIPE도 이 범주에 들지 않을까 합니다. 

클라이언트에서 소켓을 끊었다고 해서 서버에 SIGPIPE가 전달되는 것은 아닙니다. SIGPIPE는 상대방이 닫은 fd로 쓰기를 하려는 순간에 발생합니다. 


파이프 닫기

pclose()함수는 스트림을 닫은 후 리눅스의 함수인 wait4()를 호출하여 자식 프로세스 파이프의 다른 쪽의 프로세스가 종료될 때까지 기다리게 한다.
이렇게 함으로써 pclose() 함수는 자식 프로세스에게 성공/실패 상태를 전달한다. 그 시간은 자식 프로세스가 종료되는 시점이다.
pclose()를 사용하지 않고 fclose()를 사용할 경우 좀피(zombie)프로세스가 생성된다.

#include 

int pclose(FILE *stream);


부서진 파이프의 처리 

시그널(SIGPIPE)은 파이가 "손상 됐다"는 것을 의미한다.
시그널은 리눅스 커널에 의해서 발생하는 비동기적(asynchronous)인 이벤트이다.

1. signal.h 파일을 포함한다.
2. 첫번째 파이프를 열기 전에 시스널(SIGPIPE,SIG_IGN)을 호출한다. 이 호출은 리눅스 커널에게 만약 SIGPIPE 시그널이 발생하게 되면 무시하라고 말한다.

int main(it argc, char *argv) {
struct passwd *pw = 0; /* 비밀번호 정보 */
char cmd[256]; /* 명령 버퍼 */
FILE *p = 0; /* mailx 파이프 */

signl(SIGPIPE, SIG_IGN); /* SIGPIPE의 무시 */

이 함수는 SIGPIPE 시그널이 발생하게 되면 쓰기의 호출이 에러(EPIPE)를 반환학 하거나 pclose() 함수가 에러를 반환하게 한다. 이것의 결과는 SIGPIPE가 발생하였을 때 프로그램 자체적으로 기본적인 동작을 수행하게 하는 것보다는 휠씬 좋은 일이다.


---------------------------------
> 제가 이번에 하는것은 IMB AIX 운영체제 하에서 돌아가는 파일전송 서버입니다. 

> 문제는 서버가 파일을 전송하고 클라이언트가 파일을 전송받다가 클라이언트가  
> 파일전송을 취소하고 중지하면 이상하게 서버도 같이 종료된다는 것입니다. 

> 그래서 send에러시 에러메세지가 나오게되 해보았는데 역시 에러 메세지가 
> 안나오고 바로 종료되더군요. 

> 제가 생각하기에는 런타임 에러같은데 혹시 저와 같은 경험을 하신분은 
> 없으신지.... 

> 참고로 쓰레드는 POSIX 쓰레드를 썻고 서버가 클라이언트의 접속요청을 
> 기다리다가 접속될때 파일전송 쓰레드가 구동 되도록 만들었습니다. 

> 아래부분이 문제의 send부분입니다. 리눅스에서는 아무문제가 발생하지 
않았고요. 

> if(send(client_socket, (const char *)send_buffer, sizeof(SEND_DATA), 0) 
> == -1) 
> { 
> printf("send error 1-1
"); 
> break; 
> } 


이상하네요. 
리눅스라 할지라도 데이터를 받던 클라이언트 쪽에서 접속을 끊으면 서버쪽에 SIGPIPE이 뜨게 됩니다. 
SIGPIPE에 대한 디폴트 핸들러는 프로세스를 종료시킵니다. 
따라서 이 해법은 SIGPIPE을 시그널 핸들러로 마스크 (SIG_IGN??) 시키던지 send()의 마지막 플래그를 0으로 주지 말고 SIGPIPE을 무시하는 플래그로 셋팅을 하면 됩니다.


sigaction을 사용

struct sigaction act;
act.sa_handler = SIG_IGN;
sigemptyset( &act.sa_mask );
act.sa_flags = 0;
sigaction( SIGPIPE, &act, NULL );



Refer.

http://egloos.zum.com/psjHello/v/100543

http://fehead.tistory.com/146

저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret

세금정보 입력부분을 이용하실때 판매자센터에서 빨간색 배너 부분을 클릭하셔서 들어갔는데 404 에러가 발생하는 경우, 아래와 같은 방법으로 진행을 부탁드립니다. 


방법 1.

1. 판매자 센터에 로그인

2. 설정을 클릭

3. 법인 프로필을 클릭

4. 두번째 부분에 있는 세금 내역에 있는 세금정보를 확인합니다

5. 파란색으로 적혀있는 세금 정보 업데이트를 클릭

    

6. 미국 국적자인지에 대한 문의가 나옵니다. 이때 Yes 또는 No를 클릭

7. 밑에 "계속하기" 클릭

  

8. 모든 빈칸에 내용을 적어주시고 개인 사업자, 기업, 동업, 유한회사, 다른 업종 중 선택

   

9. 밑에 서명란에 이름 작성 (영어로 작성)

10. 제출 버튼 클릭

     


일반적으로 이 방법을 통하면 1분 이내에 에러 메시지가 사라지게 됩니다.

만약 다음과 같은 방법으로 진행하였는데도 동일한 에러가 발생한다면 트러블 슈팅을 해보시고 시도해 보시기 바랍니다. 


방법 2

1. 접속되어있는 모든 Google 계정을 로그아웃 합니다. 

2. 캐시 및 쿠키를 삭제합니다. 


다음과 같은 방법으로 되지 않을경우.


방법 3

- 다른 인터넷 브라우저를 사용

- 현재 Google Chrome을 사용 중이시면, 우측 상단에 3줄 모양 또는 공구 모양을 클릭후 새 시크릿창으로 다시 시도


동일한 문제가 계속 발생했을 경우 스크린 샷을 첨부하여 구글 판매자 센터에 문의하시면 됩니다.

추가적으로 계정에 관련된 자세한 내용을 원하실 경우에는 숫자로 되어있는 판매자 아이디를 첨부하여 보내주시면 됩니다.


1. Google 지갑 판매자 센터에 로그인

2. 왼쪽에 있는 배너중 설정을 클릭

3. 공개 프로필을 클릭하면 숫자로 되어있는 Google 판매자 ID가 표시되있는걸 보이실껍니다.


판매자 도움말 센터 : https://support.google.com/wallet/business


저작자 표시 비영리 변경 금지
신고

WRITTEN BY
빅터크룸
머 먹고 사냐.....

받은 트랙백이 없고 , 댓글이 없습니다.
secret